Git – עבודה עם ענפים (branches)

יצירת ענף מקומי, דחיפה שלו לשרת וקבלת עדכונים.
Git logo

במאמר הקודם הסברנו איך עובדים מול שרת מרוחק ובתור שרת מרוחק השתמשנו בגיטהאב. ראינו שיש בעצם עבודה בשני שלבים – קומיטים בגרסה המקומית ו-push של כל הקומיטים אל השרת המרוחק. אבל הכוח האמיתי של git נמצא בניהול הענפים גם במקומי וגם במרוחק וזה מה שנלמד היום.

ענפים משמשים אותנו לגרסאות שונות או תוספות שונות למוצר שלנו. למשל, אם יש לי repo של תוסף לוורדפרס ולקוח מעוניין בתוספת פונקציונלית, אני אפצל את הענף הראשי של המוצר (נקרא בדרך כלל master) לענף שעוסק בפיצ'ר, אני אעשה קומיטים מקומיים ואז אדחוף את הענף לשרת המרוחק. שם ה-QA והאוטומציה יוכלו לעבוד עליו. אם הכל תקין הענף ימוזג חזרה אל הענף הראשי (מעכשיו אני קורא לענף הראשי master). אפשר להתפרע יותר – יש במוצר שלנו כמה ענפים – ענף ה-master שהוא הענף הראשי והיציב. בתחילת תהליך הפיתוח אנחנו מפצלים את ענף ה-master לענף ה-development. ממנו אנחנו מצלים עוד ועוד ענפים שכל אחד מהם מוקדש לפיצ'ר אחר. ברגע שהמפתח מסיים לעבוד על הפיצ'ר, הוא דוחף את הענף שלו לשרת ה-git. שם ה-QA בודק אותו יחד עם האוטומציה. אם הכל תקין, הוא ימוזג ל-development. שאר המפתחים, שעובדים על ענפים משלהם יכולים להתעדכן בכל עת מענף ה-development. בסוף התהליך ה-development ממוזג עם ה-master וחוזר חלילה. ואם זה נשמע מבלבל, אל דאגה. זה יהיה פשוט עוד מעט.

אז בואו ונדבר על ענפים. על מנת ליצור ענף מקומי בשם develop כל מה שאני צריך לעשות זה לכתוב

git checkout -b develop

ה- b- הוא קריטי פה. כי הוא מייצר את הענף. מייד אקבל הודעה ש:

Switched to a new branch 'develop'

אם אכתוב git status אראה ש:

$ git status
On branch develop
nothing to commit, working directory clean

כל שינוי שאעשה עכשיו, כולל הקומיטים, יעשה בענף develop. על מנת לדחוף את הענף שלי אל השרת המרוחק, כל מה שאני צריך לעשות זה להשתמש בפקודת git push, שאליה אצרף שני ארגומנטים: הראשון הוא origin שהוא בעצם שם השרת המרוחק שהגדרתי (זוכרים? אם לא, דלגו אחורה שני מאמרים) והשני הוא שם הענף שאני רוצה לדחוף אליו בשרת המרוחק. git push origin develop

$ git push origin develop
Username for 'https://github.com': [email protected]
Password for 'https://[email protected]@github.com': 
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 319 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/sometestuser2/temp.git
 * [new branch]      develop -> develop

בעצם מה עשינו? יצרתי ענף חדש. הענף החדש נוצר מהענף שבו הייתי (במקרה הזה master) והתפצל ממנו. עכשיו כל אחד שיש לו הרשאה מתאימה (ואם אני משתמש בגיטהאב זה כל אחד בעולם) יכול לעשות clone ל-repo שלי ולמשוך את הענף שלי. איך? לעשות clone למדנו במאמר הקודם – פשוט לקחת את ה-URL של השרת המרוחק ולעשות משהו כזה:

git clone https://github.com/sometestuser2/temp.git

ועכשיו הוא צריך לבקש מ-git להביא את כל הענפים המרוחקים שיש:

$ git fetch --all

ואז לעבור אל ה-branch:

git checkout develop

שימו לב שאין כאן b- – אני לא יוצר את הענף מחדש אלא מושך את הענף המרוחק אלי.

אם מישהו עדכן את הענף המרוחק בשרת, אני יכול למשוך אותו אלי בקלות באמצעות:

git pull origin develop

בדומה ל-push, גם כאן אני מכניס שני ארגומנטים – הראשון הוא שם השרת המרוחק שהגדרתי אותו כ-origin (זוכרים?) והשני הוא שם הענף.

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

במאמר הבא נדבר על מיזוג ופיצול בין ענפים שונים.

פוסטים נוספים שכדאי לקרוא

רספברי פיי

התקנת OpenCanary על רספברי פיי

מה זה OpenCanary ואיך אפשר להתקין אותה על רספברי פיי ולשדרג את אבטחת הרשת הביתית או המשרדית.

רספברי פיי

הרצת גו על רספברי פיי

עולם הרספברי פיי והמייקרים ניתן לתפעול בכל שפה – לא רק פייתון או C – כאן אני מסביר על גו

DALL·E 2024-09-06 12.34.24 - A visually engaging post about Python and cryptographic problems. The image should feature a dark-themed background with a glowing, futuristic Python
פתרונות ומאמרים על פיתוח אינטרנט

בעיות במימוש של פונקציות קריפטוגרפיות בפייתון

היום (16 לספטמבר) ממש, אני מעביר הרצאה ב-PyconIL 2024 על בעיות קריפטוגרפיות באפליקציות פייתון. לצערי אי אפשר להכניס את כל הבעיות הקריפטוגרפיות להרצאה אחת או

תמונה של הבית הלבן עם מחשוב ענן וטקסט: FEDRAMP
פתרונות ומאמרים על פיתוח אינטרנט

FedRAMP & FIPS מבוא למתחילים

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

גלילה לראש העמוד