ساده‌سازی دستورات Git با استفاده از Git Aliasها

به عنوان یک توسعه‌دهنده، احتمالاً روزانه از 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)، این دستور را اجرا می‌کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git config --global core.editor "notepad"
git config --global core.editor "notepad"
git config --global core.editor "notepad"

برای تنظیم VS Code به‌عنوان ویرایشگر پیش‌فرض خود در ویندوز، macOS یا لینوکس، دستور زیر را اجرا می‌کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git config --global core.editor "code --wait"
git config --global core.editor "code --wait"
git config --global core.editor "code --wait"

همچنین اگر بخواهیم یک ویرایشگر پیش‌فرض دیگری را انتخاب کنیم، کافی است عبارت

Set {editor} as default Git editor
Set {editor} as default Git editor را جستجو کرده به جای
{editor}
{editor} نام ویرایشگر دلخواه خود را قرار دهیم.

چگونه باید فایل پیکربندی Git را باز کنیم؟

ترمینال موردنظر خود را باز کرده و دستور زیر را وارد می‌کنیم. این کار، فایل پیکربندی سراسری Git یعنی

git config —global
git config —global را در حالت ویرایش (
-e
-e) باز می‌کند.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git config --global -e
git config --global -e
git config --global -e

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

  • Home Directory → show hidden (Cmd + Shift + H) →
    .gitconfig
    .gitconfig :macOS
  • ویندوز:
    .gitconfig
    .gitconfig then show hidden files (in View) → and find →
    C:\Users\YourUsername\
    C:\Users\YourUsername\
  • لینوکس
    .gitconfig
    .gitconfig → Home Directory → show hidden (Ctrl + H)

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

اگر برای اولین‌بار می‌خواهیم Git alias اضافه کنیم، فایل

.gitconfig
.gitconfig را باز می‌کنیم،
[alias]
[alias] را به انتها فایل اضافه می‌کنیم و سپس shortcutهای خود را زیر آن می‌نویسیم. این کار به Git می‌گوید که این‌ها alias هستند. سپس alias مورد نظر خود، یعنی دستور کوتاه‌شده‌ای که می‌خواهیم اجرا کنیم را اضافه می‌نماییم.

فرمت Git Alias به شکل

<alias> = <command>
<alias> = <command> است، برای مثال:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
co = checkout
cob = checkout -b
co = checkout cob = checkout -b
co = checkout
cob = checkout -b

توضیح مثال‌های بالا:

co = checkout
co = checkout این دستور
git checkout
git checkout را به یک دستور کوتاه‌تر
git co
git co تبدیل می‌کند. سپس می‌توانیم دستور
git co feature/123
git co feature/123 را در ترمینال خود وارد کنیم.

ما نیازی به تایپ

git
git در ابتدای دستور نداریم، چون پیکربندی به‌طور خودکار این پیشوند را اضافه می‌کند، زیرا می‌داند که دستور ما یک دستور Git است.

نکته‌ای که باید به آن توجه داشته باشیم این است که، هر پارامتری که به دستور پاس داده شود، فقط به دستور نهایی که در alias فراخوانی می‌شود اعمال می‌گردد.

با این روش می‌توانیم aliasهای بیشتری اضافه کنیم و shortcutهایی برای دستورات موجود در Git بسازیم. پس از ذخیره و بستن فایل، این aliasها در ترمینال ما فعال خواهند شد.

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

اگر بخواهیم روشی ساده‌تر برای اضافه کردن Git Aliasها داشته باشیم، می‌توانیم آن‌ها را مستقیماً از طریق ترمینال یا خط فرمان اضافه کنیم. با استفاده از مثال‌های بالا، می‌توانیم این کار را به این شکل انجام دهیم. فرمت دستور

git config --global alias.{alias} "{original command}"
git config --global alias.{alias} "{original command}" است:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git config --global alias.co "checkout"
#or
git config --global alias.cob "checkout -b"
git config --global alias.co "checkout" #or git config --global alias.cob "checkout -b"
git config --global alias.co "checkout"
#or
git config --global alias.cob "checkout -b"

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

تا این قسمت از مقاله کاری که انجام دادیم این است که فقط چند کاراکتر را کم کردیم. اما می‌توانیم این دستورات را بهبود ببخشیم؛ می‌توانیم با استفاده از دستورات shell، دستورات مورد نظر خود را بسازیم. به عنوان مثال:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
new-work = !git checkout main && git pull && git cob
new-work = !git checkout main && git pull && git cob
new-work = !git checkout main && git pull && git cob

این alias چندین دستور Git را در یک دستور shell ترکیب می‌کند. کاراکتر

!
! به Git می‌گوید که آن را به عنوان یک دستور shell در نظر بگیرد، نه یک دستور معمولی Git.

بدون

!
!، Git alias را به عنوان یک دستور معمولی Git در نظر می‌گیرد (برای مثال،
checkout
checkout تبدیل به
git checkout
git checkout می‌شود). با استفاده از
!
!، Git می‌داند که آن را به عنوان یک دستور shell اجرا کند، بدون اینکه
git
git را در ابتدا اضافه نماید.

با ترکیب این دستورات، می‌توانیم aliasهای بسیار مفیدتری بنویسیم. دستور بالا این کارها را انجام می‌دهد:

  • ابتدا، به branch
    main
    main سوییچ می‌کند.
  • استفاده از عملگر
    &&
    && به این معنی است که دستورات بعدی تنها در صورتی اجرا می‌شوند که دستور قبلی موفقیت‌آمیز بوده باشد.
  • دومین کار این است که تغییرات جدید را از branch
    main
    main دریافت می‌کند.
  • در نهایت، با استفاده از alias دیگری به نام
    git cob
    git cob، یک branch جدید از branch
    main
    main ایجاد می‌کند.

دستور نهایی می‌تواند مانند دستورات اصلی Git، پارامترها را بپذیرد. بنابراین می‌توانیم از آن به شکل زیر استفاده کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git new-work 'feature/new-work-from-main'
git new-work 'feature/new-work-from-main'
git new-work 'feature/new-work-from-main'

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

تا اینجا، تنها توانستیم پارامترها را به دستور نهایی Git در alias خود منتقل کنیم. اما اگر بخواهیم پارامترها را به برخی از دستورات داخل alias ارسال کنیم، چه کاری باید انجام دهیم؟ می‌توانیم این کار را با استفاده از یک تابع shell انجام دهیم. به عنوان مثال:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f"
new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f"
new-work = "!f() { git checkout \"$1\" && git pull && git checkout -b \"$2\"; }; f"

در مثال بالا از یک تابع shell استفاده می‌کنیم که پارامترهای ورودی را پردازش می‌کند.

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git new-work development task/feat-123
git new-work development task/feat-123
git new-work development task/feat-123

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[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 = 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 = 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
co: به branch مورد نظر سوییچ می‌کند:
git co task/feat-123
git co task/feat-123

cob
cob: یک branch جدید از branch فعلی ایجاد می‌کند:
git cob feature/123
git cob feature/123

s
s: دستور
git status
git status را فراخوانی می‌کند تا وضعیت branch فعلی را مشاهده کنیم:
git s
git s

tidy-up
tidy-up: تمام branchهای لوکال، به جز branch
main
main را حذف می‌کند:
git tidy-up
git tidy-up

latest
latest: جدیدترین تغییرات را از branch ریموت
main
main می‌گیرد:
git latest
git latest

new-work
new-work: یک branch جدید (پارامتر دوم) از branch پارامتر اول ایجاد می‌کند:
git new-work main feat/123
git new-work main feat/123

git done
git done: branch فعلی را به repository ریموت (
origin
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
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
save: تمام فایل‌های تغییر یافته را اضافه کرده و commit می‌کند، و ویرایشگر پیش‌فرض Git را باز می‌کند تا از ما پیام commit بخواهد:
git save
git save

savem
savem: همان کار
save
save را انجام می‌دهد، اما به‌جای باز کردن ویرایشگر، می‌توانیم پیام commit را به‌صورت inline وارد کنیم:
git savem ‘Task123: add index.html
git savem ‘Task123: add index.html

br
br: این دستور شاید پیچیده به نظر برسد، اما اینطور نیست و قدرت aliaseها را نشان می‌دهد. در واقع، این دستور فرمت خروجی
git branch
git branch را سفارشی می‌کند تا فهرستی دقیق و رنگی از branchها نمایش دهد که بر اساس تاریخ آخرین commit مرتب شده است.

جمع‌بندی

در این مقاله تلاش کردیم بیشتر با Git Aliasها آشنا شویم و همچنین چند مثال مفید از aliasهایی که می‌توانیم به عنوان شروع به پیکربندی خود اضافه کنیم، بررسی کردیم.

دیدگاه‌ها:

افزودن دیدگاه جدید