שאלה לגבי הנחיות המימוש של merge

תגיות:

בצעו commit חדש כרגיל, והעבירו את HEAD, ואת ה־branch הפעיל ל־commit id החדש. אל תעבירו את BRANCH_NAME ל־commit id החדש.

לא הצלחתי להבין איך מפעילים את הbranch, כותבים בactivated.txt את הערך של
commit id? ואז כתוב בקובץ activated “ערך” של commit id ולא שם של branch ואז זה דורש יישום מחדש של עוד דברים בכל מיני מקומות…

שואל כי זה סותר אצלי בראש את ההנחייה הזאת: (אפילו שכנראה עשיתי סלט ביניהן)

אם עשית checkout לענף מסוים, זה הענף שהופך להיות פעיל.
אם עשית checkout ל־commit id, אין ענף פעיל.
אם מעולם עדיין אף אחד לא עשה checkout, ה־master הוא הענף הדיפולטי ולכן הוא הפעיל.

ב-activated.txt כותבים את שם ה-branch שהופעל בעת פעולת ה-checkout, ולא את ה-commit עליו הוא מצביע. אם נעשה checkout על איזשהו commit id, התוכנה צריכה לזהות שלא מדובר בשם של ענף, ועל כן הקובץ activated.txt צריך להתעדכן בהתאם, והתוכן שלו צריך להיות ריק עכשיו.

דוגמא:

# references.txt
HEAD=444444
master=111111
notifications=222222

# activated.txt
# Empty

לפי הדוגמא, אף ענף אינו פעיל כרגע. בוא נפעיל את ענף master ונמזג אותו עם notifications:

checkout master
# references.txt
HEAD=111111
master=111111
notifications=222222

# activated.txt
master
merge notifications
# references.txt
HEAD=666666
master=666666
notifications=222222

# activated.txt
master

עכשיו, נגיד וקיים איזשהו commit שערכו 000000, ונרצה להפעיל אותו במקום הענף הפעיל שלנו.

checkout 000000
# references.txt
HEAD=000000
master=666666
notifications=222222

# activated.txt
# Empty

מקווה שמספיק ברור :slight_smile:

3 לייקים

מאוד - רק להבנה
אם הnotifications היה הענף הפעיל, והייתי עושה merge master
אז Notifications היה מצביע על 666666

כן, 666666 זה בעצם ה-commit id החדש שנוצר כתוצאה מהמיזוג. :slight_smile:

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

בתוך ה־staging_area, החליפו את הקבצים ששונו מאז הבסיס המשותף ועד BRANCH_NAME.

הכוונה היא גם להוסיף קבצים שלא היו קיימים? או רק להחליף קבצים שכבר קיימים בstaging_area

למיטב הבנתי גם קבצים שלא היו קיימים נחשבים כקבצים ששונו, אז כן. :relaxed:

לייק 1

עכשיו ניסיתי להבין למה בעצם לא להגיד בתיאור:
“מחקו את כל מה שיש בstaging area ותכניסו את כל מה שיש בBRANCH_NAME לשם”

מה ההבדל?

יעני - איך זה לא פשוט לעשות checkout(branch_name)

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

לייק 1

ואם יש קובץ שהיה קיים בבסיס המשותף אבל נמחק בbranch - אני מוחק מהstaging area, נכון?

בתוכנית שלנו לא מתייחסים לקבצים שנמחקו.
ככה הבנתי מים.

לייק 1

בחיפוש אחר ‘תיקיה משותפת’, אם אחת התיקיות, כלומר זאת שהוזנה ל merge, או זאת זה HEAD הנוכחי מצביע עליה, נמצאת במורד השרשרת של השניה, האם היא הופכת להיות תיקית ה’בסיס’ לפעולת merge? או שלא מתייחסים להימצאותה, ומחפשים תיקיה אחרת המשותפת לשתי השרשראות?
להמחשה: בדוגמה, התיקיה הראשונה בכל רשימה, היא התיקיה ממנה מתחילה השרשרת. מה התיקיה הרלוונטית לפעולת merge בדוגמה הזאת?

828a53 זאת התיקיה הנכונה

זאת תיקיית head הנוכחי. אז עדיין?

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

2 לייקים