ענפים וניתוחים

Git flow

מודל ההסתעפות git-flow הוא חמישה כללים והמון ניהול ספרים. הכללים קלים; ניהול הספרים הוא מה שאנשים מפספסים בשש בערב ביום ריליס — ממזגים תיקון חירום לתוך main ושוכחים את develop, או מתייגים את הענף הלא נכון.

⌘K ← Git flow עושה את ניהול הספרים.

חלון git flow על ענף ריליס: התחלת ענף למעלה, סיום שלו למטה

המבנה

ענף מה יש בו
הענף המשוחרר (main) מה שנמצא בייצור. כל ריליס מתויג כאן.
ענף האינטגרציה (develop) היכן שעבודה גמורה מצטברת בין ריליסים.
feature/* יחידת עבודה אחת, מסתעפת מ־develop.
release/* גרסה שעוברת ייצוב, מסתעפת מ־develop.
hotfix/* תיקון דחוף, מסתעף מ־main — הייצור לא יכול לחכות ל־develop.

Gitcito קורא וכותב את אותם מפתחות תצורה gitflow.* שה־CLI של git flow משתמש בהם (gitflow.branch.master, gitflow.prefix.feature, …). מאגר שמישהו כבר הריץ עליו git flow init מזוהה מיד, ומאגר שהוגדר כאן עובד עם ה־CLI אחר כך. Gitcito מריץ פקודות git רגילות לכל אורך הדרך — ה־CLI לא חייב להיות מותקן.

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

התחלה

בחרו סוג, הקלידו שם, לחצו התחלה. החלון מציג את הענף שהוא עומד ליצור ואת הענף שממנו הוא ייווצר עוד לפני שאתם מתחייבים:

feature/search   from develop
hotfix/1.0.1     from main

השם הוא מה שתקלידו; הקידומת מגיעה מהמבנה.

סיום

סיום הוא החלק ששווה לעשות אוטומטי, כי הוא כמה שלבים שכולם חייבים לקרות:

סוג מה Gitcito עושה
פיצ׳ר ממזג לתוך develop עם --no-ff, מוחק את הענף, ומשאיר אתכם על develop
ריליס ממזג לתוך main, מתייג, ממזג לתוך develop, מוחק את הענף, ומשאיר אתכם על develop
תיקון חירום ממזג לתוך main, מתייג, ממזג לתוך develop, מוחק את הענף, ומשאיר אתכם על main

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

התגית היא <קידומת תגית הגרסה><שם> — release/1.1.0 הופך ל־v1.1.0 עם קידומת ברירת המחדל. בטלו את תיוג הריליס כדי לדלג על זה, וכתבו הודעת תגית אם אתם רוצים יותר מברירת המחדל.

מה הוא מסרב לעשות

  • עץ עבודה מלוכלך עוצר אותו. בצעו קומיט או סטאש קודם; סיום ממזג שני ענפים ומזיז את HEAD פעמיים, ולעשות את זה סביב עבודה שלא נכנסה לקומיט זו הדרך שבה אנשים מאבדים אותה.
  • מיזוג מתנגש מגלגל את כל העניין אחורה. אם המיזוג לתוך main מצליח אבל המיזוג לתוך develop מתנגש, אחרת הייתם נשארים עם ריליס חצי גמור. Gitcito משחזר כל ענף למקום שבו היה ומדווח על ההתנגשות. מזגו את הענף הזה ידנית, פתרו אותו בפותר ההתנגשויות, ושאר הזרימה שלכם לסיים ביד.
  • הוא לעולם אינו דוחף. סיום הוא מקומי. דחפו את main, את develop ואת התגית החדשה כשאתם מוכנים — ראו סנכרון.

ביטול

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

מתי לא להשתמש בזה

git flow מתאים לתוכנה עם ריליסים ממוספרים וענף ייצור נתמך. אם אתם פורסים מ־main כמה פעמים ביום, ענפי הריליס ותיקון החירום הם טקס שלא תשתמשו בו — ערימות ענפים או ענפים קצרי־חיים רגילים מ־main מתאימים לזה יותר. מחצית הפיצ׳רים של המודל עדיין עובדת מצוין בפני עצמה.

שיפור התרגום הזה ב־GitHub