פורסם ב זה רק קוד, כלים לחיים קלים

קיצורי גיט – עשו זאת בעצמכן

קוד: .gitconfig
זמן קריאה: 7 דקות

גיט, אם תשאלו אותי, היא חברתה הטובה של כל מתכנתת. היא מאוד נוחה לעבודה ומקלה בטירוף על תהליך הפיתוח. הבעיה היחידה עם גיט היא שכדי לעבוד איתה כמו שצריך חייבות להשקיע את הזמן כדי להתייידד איתה קצת. אחרת אפשר מאוד בקלות לאבד את הידיים ואת הרגליים ולמצוא את עצמנו מוחקות פרויקטים שלמים ומורידות אותם מחדש כי עשינו טעויות. 

כחלק מתהליך ההתיידדות שעשיתי עם גיט בשנים האחרונות התחלתי להשתמש המון בקיצורי גיט.

מה הם קיצורי גיט?

כשאנחנו לומדות להשתמש בגיט אנחנו תמיד מתחילות מכמה פקודות בסיסיות ופשוטות כמו push, pull, merge וכו'. ככל שהשימוש שלנו בגיט נהיה מורכב יותר הפקודות שאנחנו משתמשות בהן גם הן נהיות מורכבות קצת יותר.

לדוגמא, כדי להשתמש בריבייס אינרקטיבי, שאני מאוד אוהבת,  צריך להקליד את הפקודה – 

git rebase -i HEAD~<i>

ישנן פעולות שדורשות שימוש ביותר מפקודה אחת. למשל, כדי לקמט את השינויים הנוכחיים שלנו צריך להשתמש בשתי פקודות – 

git add .
git commit -m <message>

וככל שאנחנו רוצות לעשות דברים מגניבים יותר, כך רמת המורכבות עולה גם היא.

כדי להקל על עצמנו, וכדי שלא נצטרך לשנן בעל פה פקודות חס וחלילה, יש לגיט כלי מאוד שימושי – קיצורים1. ה"קיצורים" האלה מאפשרים לנו להגדיר פונקציות שמורכבות מרצף של פקודות גיט, או אפילו שפות סקריפטים. לאחר מכן, נוכל לקרוא לקיצורים במקום לפקודות עצמן.

אז איך יוצרות קיצורי גיט?

אז קודם כל, יש את הדרך הפשוטה – להשתמש בפקודה המיועדת לכך. 
הפקודה הזו – 

git config --global alias.<alias> <command>

לדוגמא, אם אתן רוצות לקנפג את הקיצור co לפקודה checkout, תוכלו להקליד – 

git config --global alias.co checkout

בפעם הבאה שתרצו לעשות checkout, תוכלו להשתמש בקיצור – 

git co <branch-name>

אם אתן כמוני, ומעדיפות ללכלך את הידיים שלכן טיפה יותר, אתן יכולות לאתר את הקובץ gitconfig במחשב שלכן ולערוך אותו.
הקובץ נראה בערך כך – 

gitconfig-file
(השמטתי כמה שורות כמובן, אבל זה הרעיון הכללי).

לקובץ הזה אתן יכולות להוסיף את כל הקיצורים2 שאתן רוצות. ברגע שתשמרו אותו תוכלו להתחיל להשתמש בהם.

כפי שאתן רואות, ההגדרה של הקיצורים בקובץ היא מאוד פשוטה. רק מוסיפים לרשימת הקיצורים שורה עם שם הקיצור, והפקודה הגיטים שלה אתן רוצות לקרוא.

<alias> = <command>

איך יוצרות קיצורי גיט למספר רב של פקודות?

כל הקיצורים שאתן מוסיפות לגיט חייבים להופיע בשורה אחת. אז מה אפשר לעשות כשרוצות להכניס פעולה שמורכבת מכמה פקודות? 
יש כמה דרכים ואסכולות לנושא הזה, אבל מכל מה שניסיתי, הדרך הכי פשוטה הייתה ליצור פונקציה אנונימית ולהשתמש בה. הסינטקס יכול להיות מעצבן בהתחלה עד שמתרגלות, אבל בשבילי זה עבד טוב.

לדוגמא, נגיד שאני רוצה ליצור קיצור לפונקציה שעושה קומיט לכל השינויים שעשיתי עד עכשיו. אני רוצה שהפונקציה שלי תקבל הודעת קומיט בתור משתנה, ותקרא גם לפעולת ה-add וגם לפעולת ה-commit.
כדי לעשות את זה אני אגדיר את הפונקציה הבאה – 

cm = "!f() { git add .; git commit -m $1; }; f"

כן, הסינטקס קצת קשה לצפייה, אני יודעת. אבל אני אפרק לכן את מה שקורה פה. 
קודם כל, נסתכל על הפונקציה הזו כשהיא לא בשורה אחת, וזה כבר יהיה יותר טוב. 

!f() {
	git add .;
	git commit -m $1;
};
f

יותר נורמאלי, נכון? זה מה שקורה בפקודה: 

  • הפקודה מתחילה בסימן קריאה. ככה אנחנו אומרות לגיט שאנחנו הולכות להכניס פה משהו שהוא לא רק פקודת גיט כמו בסעיף הקודם.
  • אחר כך אנחנו מגדירות פונקציה אנונימית f שתכיל את הפקודות שלנו.
  • בתוך הפונקציה f רשמתי את שתי הפקודות שרציתי – add, ו-commit. פקודת ה-commit שלי משתמשת במשתנה $1 בתור הודעת הקומיט. למקרה שאתן לא מכירות, $1 הוא המשתנה הראשון שתעבירו לפקודה כשתקראו לה.
  • בשורה האחרונה אנחנו קוראות לפונקציה שהרגע הגדרנו ומבצעות אותה.

שימו לב לא לשכוח את הרווחים בין הפקודות לסוגריים ואת כל ה-; שצריך להוסיף שם, אחרת הפקודה שלכן לא תעבוד.

אז אילו פקודות כדאי לי ליצור?

התשובה היא כמובן – כל הפקודות שאתן משתמשות בהן באופן קבוע, אבל הפוסט הזה לא יהיה שלם בלי שאני אמליץ על הפקודות האהובות עליי.

  1. ריבייס אינטראקטיבי.
    הקיצור הזה לוקח כמשתנה את מספר הקומיטים שאני רוצה לעשות להם ריבייס, ומתחיל תהליך של ריבייס אינטראקטיבי –
 sq = "!f() { git rebase -i HEAD~$1; }; f"
  1. תיקונים לקומיט האחרון.
    הקיצור הזה מוסיף את כל השינויים הנוכחיים שלי ומוסיף אותם לקומיט האחרון שביצעתי. 
fixit = "!f() { git add .; git commit --amend; }; f"
  1. זריקת שינויים.
    הקיצור הזה זורק את כל השינויים שעשיתי מאז הקומיט האחרון. הרבה יותר קל ומהיר מלמחוק שינויים שעשית בשביל בדיקות מקומיות.
discard = reset --hard
  1. מחיקת בראנץ' מרוחק.
    המטרה של הקיצור הזה היא פקודה קלה למחיקת בראנץ' מרוחק לפני שמוחקות את העותק המקומי שלו. זו דרך נחמדה לוודא שאנחנו לא מזבלות את הריפו שלנו עם בראנצ'ים שאנחנו כבר לא משתמשות בהן. כמובן שצריך לעשות זאת בזהירות, ורק על בראנצ'ים שבוודאות סיימנו לעבוד איתם.
    הקיצור הזה טיפה יותר מורכב מהקודמים, והוא משתמש בפקודות bash, לכן הסינטקס שלו שונה.
    אתן יכולות לפרק את הפקודה הזו לכמה פקודות קטנות יותר כדי להבין לעומק איך הן עובדות, וגם לבנות מהן פקודות משלכן.
delete-remote = !sh -c \"git push origin --delete $(git rev-parse --abbrev-ref HEAD)\"

אני אפרק את מה שקורה כאן – 

  • סימן קריאה, כמו בפונקציות הרגילות, מסמן שלא מדובר בפקודות גיט
  • החלק הבא – sh -c אומר לגיט שאנחנו רוצות להריץ את סקריפט ה-bash שנמצא בתוך המרכאות
  • הפקודה git push origin –delete <branch-name>, כפי שאתן יכולות לנחש, מוחקת בראנצ' מרוחק.
  • הפקודה git rev-parse –abbrev-ref HEAD תביא לכן את שם הבראנצ' הנוכחי שאתן נמצאות בו, והסיבה שהיא עטופה בסוגריים וסימן $ היא כדי שהתוצאה של הפונקציה תעבור לסקריפט.

אלו חלק מהפקודות האהובות עליי. יש עוד כמה פקודות, והן כולן נמצאות בגיט שלי. אתן מוזמנות להעתיק אליכן, ולהציע פקודות נוספות.

מקווה שתקנפגו ותיהנו!

הערות:

unsplash-logoHeader photo by Markus Spiske
  1. בגיט באופן ספציפי ובמערכות הפעלה באופן כללי, קיצורים כאלה נקראים בדרך כלל alias.
  2. יכול להיות שתכניסו בטעות איזו שורה דפוקה שהגיט שלכן יתקשה קצת לבלוע, אבל לא לדאוג, תמיד אפשר למחוק אותה, לשמור מחדש, והכל יחזור לקדמותו.

5 תגובות בנושא “קיצורי גיט – עשו זאת בעצמכן

  1. ⁦Umm… Actually…
    אם לפונקציה יש שם (f, כדי שאפשר יהיה לקרוא לה), אז היא לא אנונימית…

  2. אחלה פוסט. הערה קטנה – הפונקציה f היא לא אנונימית, שמה הוא f (:

  3. האם יש לך איזה פוסט או מדריך למתחילים טוב לשימוש בgit?
    כזה שממש אפשר להתחיל איתו מאפס.

השאר תגובה