به عنوان یک توسعه‌دهنده، احتمالاً روزانه از Git CLI استفاده می‌کنیم. با این حال، نوشتن مکرر دستورات مشابه، به ویژه اگر طولانی باشند، می‌تواند خسته کننده باشد. اینجا است که Git Aliasها به کمک ما می‌آیند. در این مقاله قصد داریم تا یاد بگیریم که چگونه می‌توانیم با استفاده از aliasها دستورات Git خود را ساده‌تر کنیم.

Git Alias چیست؟

Git Aliasها، shortcutهای سفارشی برای دستورات Git هستند که انجام کارهای رایج را سریع‌تر و آسان‌تر می‌کنند. آن‌ها به ما این امکان را می‌دهند که دستورات خود را تعریف کنیم و shortcutها را دقیقاً همان‌طور که می‌خواهیم تنظیم نماییم.

ما دو گزینه اصلی برای ساختن Git Aliasها در پیکربندی Git خود داریم: استفاده از فایل پیکربندی Git یا اضافه کردن آن‌ها مستقیماً از طریق CLI (ترمینال یا خط فرمان).

چگونه می‌توانیم Git Aliasها را از طریق فایل پیکربندی سراسری Git اضافه کنیم؟

این گزینه که روش پیشنهادی نیز می‌باشد، شامل باز کردن فایل پیکربندی سراسری Git و اضافه کردن Git Aliasها به انتهای فایل است.

چگونه باید ویرایشگر دلخواه Git خود را تنظیم کنیم؟

ابتدا باید ویرایشگر پیش‌فرض نرم‌افزار پیکربندی 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 یعنی git config —global را در حالت ویرایش (-e) باز می‌کند.

git config --global -e

می‌توانیم فایل پیکربندی Git را مستقیماً از مکان‌های زیر باز کنیم:

چطور یک Git Alias از طریق فایل پیکربندی خود اضافه کنیم؟

اگر برای اولین‌بار می‌خواهیم 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ها در ترمینال ما فعال خواهند شد.

چگونه Aliasها را در CLI اضافه کنیم؟

اگر بخواهیم روشی ساده‌تر برای اضافه کردن Git Aliasها داشته باشیم، می‌توانیم آن‌ها را مستقیماً از طریق ترمینال یا خط فرمان اضافه کنیم. با استفاده از مثال‌های بالا، می‌توانیم این کار را به این شکل انجام دهیم. فرمت دستور git config --global alias.{alias} "{original command}" است:

git config --global alias.co "checkout"
#or
git config --global alias.cob "checkout -b"

چگونه می‌توانیم دستورات سفارشی برای shortcutهای پیچیده‌تر بسازیم؟

تا این قسمت از مقاله کاری که انجام دادیم این است که فقط چند کاراکتر را کم کردیم. اما می‌توانیم این دستورات را بهبود ببخشیم؛ می‌توانیم با استفاده از دستورات 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های بسیار مفیدتری بنویسیم. دستور بالا این کارها را انجام می‌دهد:

دستور نهایی می‌تواند مانند دستورات اصلی 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 استفاده می‌کنیم که پارامترهای ورودی را پردازش می‌کند.

  1. !f()
  2. تمامی موارد داخل { } همان دستورات هستند که درون تابع f() اجرا خواهند شد.
  3. دستور git checkout \”$۱”'\: یک دستور Git پارامتردار را اجرا می‌کند، جایی که به پارامتر اولی که به alias ارسال شده، تبدیل می‌شود. escape sequenceهای مانند \" اطراف به ما این امکان را می‌دهند که نام branchهایی که دارای فاصله هستند را به درستی پردازش نماییم.
  4. &&: یک عملگر منطقی است که تضمین می‌کند هر دستور فقط در صورتی اجرا شود که دستور قبلی موفقیت‌آمیز بوده باشد. اگر دستور git checkout "$1" شکست بخورد، دستورات بعدی اجرا نخواهند شد.
  5. git checkout -b \”$۲”\: یک branch جدید با نام پارامتر دوم ایجاد می‌کند.
  6. ;: انتهای تابع f() را نشان می‌دهد.
  7. f: فراخوانی نهایی تابع f بلافاصله انجام می‌شود، به این معنا که وقتی ما alias را فراخوانی می‌کنیم، تابع را تعریف کرده و سپس بلافاصله آن را فراخوانی می‌نماییم.

استفاده از آن به این شکل است:

git new-work development task/feat-123

سایر Aliasهای مفید

[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هایی که می‌توانیم به عنوان شروع به پیکربندی خود اضافه کنیم، بررسی کردیم.