به عنوان یک توسعهدهنده، احتمالاً روزانه از Git CLI استفاده میکنیم. با این حال، نوشتن مکرر دستورات مشابه، به ویژه اگر طولانی باشند، میتواند خسته کننده باشد. اینجا است که Git Aliasها به کمک ما میآیند. در این مقاله قصد داریم تا یاد بگیریم که چگونه میتوانیم با استفاده از aliasها دستورات Git خود را سادهتر کنیم.
Git Aliasها، shortcutهای سفارشی برای دستورات Git هستند که انجام کارهای رایج را سریعتر و آسانتر میکنند. آنها به ما این امکان را میدهند که دستورات خود را تعریف کنیم و shortcutها را دقیقاً همانطور که میخواهیم تنظیم نماییم.
ما دو گزینه اصلی برای ساختن Git Aliasها در پیکربندی Git خود داریم: استفاده از فایل پیکربندی Git یا اضافه کردن آنها مستقیماً از طریق CLI (ترمینال یا خط فرمان).
این گزینه که روش پیشنهادی نیز میباشد، شامل باز کردن فایل پیکربندی سراسری Git و اضافه کردن Git Aliasها به انتهای فایل است.
ابتدا باید ویرایشگر پیشفرض نرمافزار پیکربندی Git خود را تنظیم کنیم. بهعنوان مثال، ما از VS Code برای ویرایش فایل پیکربندی Git خود استفاده میکنیم، اما میتوانیم از هر ویرایشگر متنی یا ویرایشگر کدی نیز استفاده کنیم.
برای تنظیم Notepad بهعنوان ویرایشگر پیشفرض خود در ویندوز (CMD/PowerShell)، این دستور را اجرا میکنیم:
git config --global core.editor "notepad"
برای تنظیم VS Code بهعنوان ویرایشگر پیشفرض خود در ویندوز، macOS یا لینوکس، دستور زیر را اجرا میکنیم:
git config --global core.editor "code --wait"
همچنین اگر بخواهیم یک ویرایشگر پیشفرض دیگری را انتخاب کنیم، کافی است عبارت Set {editor} as default Git editor
را جستجو کرده به جای {editor}
نام ویرایشگر دلخواه خود را قرار دهیم.
ترمینال موردنظر خود را باز کرده و دستور زیر را وارد میکنیم. این کار، فایل پیکربندی سراسری Git یعنی git config —global
را در حالت ویرایش (-e
) باز میکند.
git config --global -e
میتوانیم فایل پیکربندی Git را مستقیماً از مکانهای زیر باز کنیم:
.gitconfig
:macOS.gitconfig
then show hidden files (in View) → and find → C:\Users\YourUsername\
.gitconfig
→ Home Directory → show hidden (Ctrl + H)اگر برای اولینبار میخواهیم Git alias اضافه کنیم، فایل .gitconfig
را باز میکنیم، [alias]
را به انتها فایل اضافه میکنیم و سپس shortcutهای خود را زیر آن مینویسیم. این کار به Git میگوید که اینها alias هستند. سپس alias مورد نظر خود، یعنی دستور کوتاهشدهای که میخواهیم اجرا کنیم را اضافه مینماییم.
فرمت Git Alias به شکل <alias> = <command>
است، برای مثال:
co = checkout cob = checkout -b
co = checkout
این دستور git checkout
را به یک دستور کوتاهتر git co
تبدیل میکند. سپس میتوانیم دستور git co feature/123
را در ترمینال خود وارد کنیم.
ما نیازی به تایپ git
در ابتدای دستور نداریم، چون پیکربندی بهطور خودکار این پیشوند را اضافه میکند، زیرا میداند که دستور ما یک دستور Git است.
نکتهای که باید به آن توجه داشته باشیم این است که، هر پارامتری که به دستور پاس داده شود، فقط به دستور نهایی که در alias فراخوانی میشود اعمال میگردد.
با این روش میتوانیم aliasهای بیشتری اضافه کنیم و shortcutهایی برای دستورات موجود در Git بسازیم. پس از ذخیره و بستن فایل، این aliasها در ترمینال ما فعال خواهند شد.
اگر بخواهیم روشی سادهتر برای اضافه کردن Git Aliasها داشته باشیم، میتوانیم آنها را مستقیماً از طریق ترمینال یا خط فرمان اضافه کنیم. با استفاده از مثالهای بالا، میتوانیم این کار را به این شکل انجام دهیم. فرمت دستور git config --global alias.{alias} "{original command}"
است:
git config --global alias.co "checkout" #or git config --global alias.cob "checkout -b"
تا این قسمت از مقاله کاری که انجام دادیم این است که فقط چند کاراکتر را کم کردیم. اما میتوانیم این دستورات را بهبود ببخشیم؛ میتوانیم با استفاده از دستورات shell، دستورات مورد نظر خود را بسازیم. به عنوان مثال:
new-work = !git checkout main && git pull && git cob
این alias چندین دستور Git را در یک دستور shell ترکیب میکند. کاراکتر !
به Git میگوید که آن را به عنوان یک دستور shell در نظر بگیرد، نه یک دستور معمولی Git.
بدون !
، Git alias را به عنوان یک دستور معمولی Git در نظر میگیرد (برای مثال، checkout
تبدیل به git checkout
میشود). با استفاده از !
، Git میداند که آن را به عنوان یک دستور shell اجرا کند، بدون اینکه git
را در ابتدا اضافه نماید.
با ترکیب این دستورات، میتوانیم aliasهای بسیار مفیدتری بنویسیم. دستور بالا این کارها را انجام میدهد:
main
سوییچ میکند.&&
به این معنی است که دستورات بعدی تنها در صورتی اجرا میشوند که دستور قبلی موفقیتآمیز بوده باشد.main
دریافت میکند.git cob
، یک branch جدید از branch main
ایجاد میکند.دستور نهایی میتواند مانند دستورات اصلی Git، پارامترها را بپذیرد. بنابراین میتوانیم از آن به شکل زیر استفاده کنیم:
git new-work 'feature/new-work-from-main'
تا اینجا، تنها توانستیم پارامترها را به دستور نهایی Git در alias خود منتقل کنیم. اما اگر بخواهیم پارامترها را به برخی از دستورات داخل alias ارسال کنیم، چه کاری باید انجام دهیم؟ میتوانیم این کار را با استفاده از یک تابع shell انجام دهیم. به عنوان مثال:
new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f"
در مثال بالا از یک تابع shell استفاده میکنیم که پارامترهای ورودی را پردازش میکند.
!f()
!
به Git میگوید که alias را بهعنوان یک دستور shell تفسیر کند، نه یک دستور معمولی Git.f()
یک تابع shell به نام f
تعریف میکند که به ما این امکان را میدهد تا چندین دستور را به صورت متوالی اجرا نماییم.{ }
همان دستورات هستند که درون تابع f()
اجرا خواهند شد.git checkout \”$۱”'\
: یک دستور Git پارامتردار را اجرا میکند، جایی که $۱
به پارامتر اولی که به alias ارسال شده، تبدیل میشود. escape sequenceهای مانند \"
اطراف $۱
به ما این امکان را میدهند که نام branchهایی که دارای فاصله هستند را به درستی پردازش نماییم.&&
: یک عملگر منطقی است که تضمین میکند هر دستور فقط در صورتی اجرا شود که دستور قبلی موفقیتآمیز بوده باشد. اگر دستور git checkout "$1"
شکست بخورد، دستورات بعدی اجرا نخواهند شد.git checkout -b \”$۲”\
: یک branch جدید با نام پارامتر دوم ایجاد میکند.;
: انتهای تابع f()
را نشان میدهد.f
: فراخوانی نهایی تابع f
بلافاصله انجام میشود، به این معنا که وقتی ما alias را فراخوانی میکنیم، تابع را تعریف کرده و سپس بلافاصله آن را فراخوانی مینماییم.استفاده از آن به این شکل است:
git new-work development task/feat-123
[alias] co = checkout cob = checkout -b s = status tidy-up = !git checkout main && git branch | grep -v "main" | xargs git branch -D latest = !git checkout main && git pull new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f" done = !git push -u origin HEAD save = !git add -A && git commit saveM = !git add -A && git commit -m br = branch --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(contents:subject) %(color:green)(%(committerdate:relative)) [%(authorname)]' --sort=-committerdate
کاری که این alias انجام میدهد این است که:
co
: به branch مورد نظر سوییچ میکند: git co task/feat-123
cob
: یک branch جدید از branch فعلی ایجاد میکند: git cob feature/123
s
: دستور git status
را فراخوانی میکند تا وضعیت branch فعلی را مشاهده کنیم: git s
tidy-up
: تمام branchهای لوکال، به جز branch main
را حذف میکند: git tidy-up
latest
: جدیدترین تغییرات را از branch ریموت main
میگیرد: git latest
new-work
: یک branch جدید (پارامتر دوم) از branch پارامتر اول ایجاد میکند: git new-work main feat/123
git done
: branch فعلی را به repository ریموت (origin
) پوش میکند و آن را به عنوان branch upstream تنظیم مینماید. این دستور زمانی مفید است که اولین commit خود را ارسال میکنیم و با خطای زیر مواجه میشویم:
fatal: The current branch has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin
save
: تمام فایلهای تغییر یافته را اضافه کرده و commit میکند، و ویرایشگر پیشفرض Git را باز میکند تا از ما پیام commit بخواهد: git save
savem
: همان کار save
را انجام میدهد، اما بهجای باز کردن ویرایشگر، میتوانیم پیام commit را بهصورت inline وارد کنیم: git savem ‘Task123: add index.html
br
: این دستور شاید پیچیده به نظر برسد، اما اینطور نیست و قدرت aliaseها را نشان میدهد. در واقع، این دستور فرمت خروجی git branch
را سفارشی میکند تا فهرستی دقیق و رنگی از branchها نمایش دهد که بر اساس تاریخ آخرین commit مرتب شده است.
در این مقاله تلاش کردیم بیشتر با Git Aliasها آشنا شویم و همچنین چند مثال مفید از aliasهایی که میتوانیم به عنوان شروع به پیکربندی خود اضافه کنیم، بررسی کردیم.
۵۰ درصد تخفیف ویژه نوروز فرانت کست تا ۱۵ فروردین
کد تخفیف: spr