דגם מוצלח של סניפים אידיוט

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

קרדיטים

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

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

מבוא

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

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

תבנית ריקה

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

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

למה אידיוט?

לדיון מעמיק היתרונות והחסרונות של לגית לעומת מערכות בפקדי קוד מקור מרכזי, לראות את אינטרנט. שם היא אדירה “מלחמה” סביב זה. כמפתח, אני מעדיף לגית ביחס אחרים כל הכלים הקיימים היום. אידיוט אין ספק שינתה את הדרך שבה מפתחים לחשוב לעשותם מיזוג או ליצור סניף. אני בא מהעולם הקלאסי של Cvs/Subversion, איפה מיזוג/מסעף . זה משהו שאת עושה רק פעם בכמה זמן תמיד נראה קצת מפחיד (“היזהרו מהתנגשויות של מיזוג, הם נושכים!”).

עם לגית פעולות אלה [מיזוג/מסעף] מאוד פשוט הינם מייצגים אחד החלקים העיקריים של שגרת העבודה שלנו, תאמין לי. לדוגמה, ב ספר Csv/Subversion, מסעף ו מיזוג מכוסים בפעם הראשונה רק ב פרקים מאוחר יותר (עבור משתמשים מתקדמים), בעוד כל ספר על אידיוט, זו נתפסת בפרק 3 (יסודות).

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

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

מרכזי, אבל ממורכז

התצורה של המאגר זה אנחנו שימוש וזה עובד טוב מאוד עם הדגם הזה מסעף מורכב של מאגר מרכזי. שימו לב כי מאגר זה רק “נחשב” במרכז (מכיוון לגית DVCS [גירסה בקרת מערכות מבוזרות], IE, אין כמו מאגר מרכזי ברמה טכנית). אנחנו להפנות את מאגר זה כמו מקור, מאז השם הזה מוכר כל המשתמשים אידיוט.

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

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

הענפים העיקריים

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

  • מאסטר
  • לפתח

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

אנו רואים מקור/מאסטר כמו הסניף הראשי שבו קוד המקור של הראש תמיד משקפת מצב מוכן-הפקת [מוכן לייצור].

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

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

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

ענפי עזר

שלצידו סניפים הראשי, מאסטר ו לפתח, מודל הפיתוח שלנו עושה שימוש במגוון של סניפים כדי לעזור לתמוך בפיתוח סימולטני בין חברי הצוות, מה 1) מקל על המעקב של תכונות חדשות [תכונות], 2) להכין לאספקה של גירסה חדשה [שחרור] ו 3) עוזר מהר לתקן פגמים בייצור [התיקון החם]. בניגוד סניפים הראשי, אלה סניפים יש חיים קצרים, עכשיו זה בסופו של דבר יוסר.

סוגים שונים של סניפים [העוזרים] אנו יכולים להשתמש, הם:

  • תכונה סניפים
  • שחרור סניפים
  • התיקון החם סניפים

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

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

תכונה סניפים

[תכונות = תכונות/פונקציונליות]

– יכול סניף [סניף] מ:
לפתח
– צריך למזג-אם [מיזוג] שוב:
לפתח
– המוסכמה סניף:
שום דבר, חוץ מאסטר, לפתח, שחרור-*, או התיקון החם-*

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

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

תכונה סניפים בדרך כלל קיימים רק במאגר לפתח, לא נמצא מקור.

יצירת תכונה סניפים

$ לגית לקופה -b myfeature לפתח
# Switched to a new branch "myfeature"

שילוב תכונה הסתיים בפיתוח

תכונות סופית ניתן למזג[מוזג] עם סניף לפתח כדי להוסיף אותם עכשיו שחרור.

$ הוצאה לגית לפתח
# החליף לפתח סניף' '
$ מיזוג אידיוט --ב-סס myfeature
# עדכון ea1b82a... 05e9557
# (סיכום של שינויים)
# $ לגית סניף-d myfeature
# Myfeature סניף שנמחקו (היה 05e9557).
$ לפתח לגית לדחוף מקור

הדגל –לא-ff גורם את המיזוג [מיזוג] תמיד ליצור אובייקט חדש של פעולת commit, למרות המיזוג היה יכול. להתבצע עם תריץ קדימה [FF]. פעולה זו מונעת לאובדן מידע אודות ההיסטוריה של הקיום תכונה סניף, קיבוץ מבצע זה נוספו תכונה. להשוות:

במקרה האחרון [שבאיור], . זה בלתי אפשרי לראות מן ההיסטוריה לגית אילו מבצע בוצעו בתוך תכונה; אתה תצטרך לקרוא באופן ידני כל הודעות יומן. הפוך תכונה חתיכה אחת (IE, קבוצה של מבצע), . זה ממש כאב ראש במצב האחרון, בזמן זה קל לעשות אם הדגל –לא-ff שימש.

כן, פעולה זו תיצור עוד כמה. חפצים של מבצע (ריק), אבל הוא הרבה יותר גדולה מאשר עלות.

שחרור סניפים

[שחרור = המהדורה משלוח]

– יכול סניף [סניף] מ:
לפתח
– צריך למזג-אם [מיזוג] שוב:
לפתח ו מאסטר
– המוסכמה סניף:
שחרור-*

את מהדורות סניפים לסייע בהכנת מהדורה הפקה חדשה [ייצור שחרור]. הם מאפשרים לך לנקד את שתשמור של השעה האחרונה. בנוסף, הם מאפשרים תיקוני באגים קטנים באגים ועל ההגדרה של מטה-נתונים עבור שחרור (מספר הגירסה, לבנות תאריכים, ועוד). לעשות את כל העבודה שחרור סניף, את לפתח סניף להישאר נקי כדי לקבל תכונות הבא גדול שחרור [גירסה].

מהרגע מפתח ליצור החדש שחרור סניף הסתעפות של לפתח ואז לפתח כבר (. כמעט) המשקף את המצב הרצוי של חדש שחרור [גירסה]. כל תכונות מועמדים שחרור להיבנות צריך להיות משולב [מיזוג] את לפתח ברגע זה. כבר תכונות מול משחרר העתיד צריך לצפות הבאה שחרור [גירסה].

הוא בדיוק בתחילת שנות שחרור סניף זה הבא שחרור מקבל מספר גירסה – לא לפני. עד אז, את לפתח סניף בא לידי ביטוי שינויים “שחרור הבא” [הגירסה הבאה], אבל לא ברור אם זה “הגירסה הבאה” בסופו של דבר תהיה 0.3 או 1.0, עד שחרור סניף הוא התחיל. זו החלטה בתחילת שחרור סניף מתבצע לפי הכללים של הפרויקט ניהול גירסאות לזמין [אני מציע לראות “ניהול גירסאות סמנטי“].

יצירת ענף שחרור

את מהדורות סניפים נוצרות לפתח סניף. לדוגמה, בוא נגיד את זה הגירסה 1.1.5 המהדורה הייצור הנוכחי ויש לנו נהדר שחרור בא. מדינת לפתח ? אתה מוכן “הגירסה הבאה” [שחרור הבא] החלטנו כי זה יהפוך הגירסה 1.2 (במקום 1.1.6 או 2.0). אז, אנחנו הרחיבו ונותנים שחרור סניף שם המשקף את מספר הגירסה החדשה:

$ לגית לקופה -(ב) שחרור-1.2 לפתח
# Switched to a new branch "release-1.2"
$ ./בליטה-גירסה.sh 1.2
# קבצים שונה בהצלחה, גירסה נתקל כדי 1.2.
$ לגית commit -את -m "Bumped version number to 1.2"
# [שחרור-1.2 74 יח 9424] מספר הגירסה נתקל כדי 1.2
# 1 קבצים שהשתנו, 1 הוספות(+), 1 מחיקות(-)

לאחר יצירת חדש סניף לגשת אליו, אנחנו במספר הגירסה. כאן, בליטה-version.sh תסריט מעטפת שמשנה כמה קבצים מן העותק לעבודה כדי לשקף את הגירסה החדשה. (זה יכול, בטח, יהיה שינוי ידני – הנקודה היא כי קבצים מסוימים לשנות.) אז, נעשה פעולת commit מספר הגירסה ששונתה.

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

השלמת ענף שחרור

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

תחילה שני השלבים, אידיוט:

$ לגית הוצאה מאסטר
# החליף לענף "מאסטר"
$ מיזוג אידיוט --ב-שחרור FF-1.2
# מיזוג שנעשו על ידי רקורסיבית.
# (סיכום של שינויים)
$ לגית תג -את 1.2

את שחרור הוא עכשיו שהושלמו וסומן על עתידי.

הערה: באפשרותך להשתמש גם את דגלי-s או-u כדי לחתום את התג באמצעות הצפנה.

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

$ הוצאה לגית לפתח
# החליף לפתח סניף' '
$ מיזוג אידיוט --ב-שחרור FF-1.2
# מיזוג שנעשו על ידי רקורסיבית.
# (סיכום של שינויים)

שלב זה יכול להוביל לקונפליקט מיזוג (כנראה ללכת, ברגע ששינינו את מספר הגירסה). אם כך, לתקן ולעשות פעולת commit.

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

$ סניף אידיוט -שחרור-d-1.2
# סניף שנמחקו שחרור-1.2 (היה ff452fe).

התיקון החם סניפים

– יכול סניף [סניף] מ:
מאסטר
– צריך למזג-אם [מיזוג] שוב:
לפתח ו מאסטר
– המוסכמה סניף:
התיקון החם-*

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

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

יצירת הענף החם

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

$ לגית לקופה -(ב) החם-1.2.1 מאסטר
# Switched to a new branch "hotfix-1.2.1"
$ ./בליטה-גירסה.sh 1.2.1
# קבצים שונה בהצלחה, גירסה נתקל כדי 1.2.1.
$ לגית commit -את -m "Bumped version number to 1.2.1"
# [hotfix-1.2.1 41e61bb] מספר הגירסה נתקל כדי 1.2.1
# 1 קבצים שהשתנו, 1 הוספות(+), 1 מחיקות(-)

Não esqueça de trocar o número da versão após a ramificação!

לאחר מכן, corrija o erro e faça o פעולת commit da correção em um ou mais פעולת commit separados.

$ לגית commit -m "Fixed severe production problem"
# [hotfix-1.2.1 abbe5d6] Fixed severe production problem
# 5 קבצים שהשתנו, 32 הוספות(+), 17 מחיקות(-)

Finalizando um hotfix branch

Quando terminado, את bugfix precisa ser mesclado de volta ao מאסטר, אבל זה גם צריך להיות משולב שוב כדי לפתח, על מנת להבטיח כי bugfix גם להיכלל בגירסה הבאה. . זה די דומה איך שחרור סניפים הם סופיים.

הראשון, לעדכן מאסטר ולסמן שחרור [בחר את הקיץ]:

$ לגית הוצאה מאסטר
# החליף לענף "מאסטר"
$ מיזוג אידיוט --ב-FF החם-1.2.1
# מיזוג שנעשו על ידי רקורסיבית.
# (סיכום של שינויים)
$ לגית תג -את 1.2.1

הערה: באפשרותך להשתמש גם את דגלי-s או-u כדי לחתום את התג באמצעות הצפנה.

לאחר מכן, כוללים bugfix ב לפתח גם:

$ הוצאה לגית לפתח
# החליף לפתח סניף' '
$ מיזוג אידיוט --ב-FF החם-1.2.1
# מיזוג שנעשו על ידי רקורסיבית.
# (סיכום של שינויים)

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

סוף סוף, להסיר סניף זמני:

$ סניף אידיוט -תיקון חם-d-1.2.1
# סניף שנמחקו החם-1.2.1 (היה abbe5d6).

סיכום

Embora não haja nada realmente extraordinário neste modelo de ramificação, a figura no início do Post pode ser muito útil em nossos projetos. Ela mostra um modelo mental fácil de compreender e permite aos membros da equipe desenvolver um entendimento comum dos processos de מסעף ו releasing.

Uma versão em PDF de alta qualidade da figura é fornecida no blog do post original: http://nvie.com/posts/a-successful-git-branching-model/ [ou no link de Download abaixo]. Vá em frente e coloque-o na parede para obter uma rápida referência a qualquer momento.

סמל

Git-branching-model-20170825.pdf
3.89 MB 128 הורדות

מחבר: וינסנט Driessen
Original Blog: http://nvie.com/
Licença: CC BY-SA

סה כ כניסות: 2481

תשאיר הודעה

כתובת הדוא ל שלך לא יפורסם. שדות חובה מסומנים *