תת־עצים
תת־עץ מעתיק מאגר אחר לתוך תיקייה שלכם. אחרי זה הקבצים באמת נמצאים שם:
git clone רגיל מקבל אותם, git checkout מזיז אותם כמו כל קובץ אחר, ואף אחד לא
חייב לדעת שהתיקייה הגיעה ממקום אחר.
זה כל ההבדל מתת־מודול, ששומר רק מצביע ודורש
--recurse-submodules, צ׳קאאוט משלו, ו־HEAD מנותק משלו כדי להישאר מסודר.
⌘K ← תת־עצים.

המלכוד שאף אחד לא מזכיר
git אינו מתעד שום מניפסט לתת־עצים. לתת־מודול יש .gitmodules, שמונה כל
כתובת וכל נתיב. לתת־עץ אין כלום — רק שורת git-subtree-dir: בקומיט שביצע את
הייבוא.
כך שמאגר יכול להכיל תת־עץ ולא לתת לכם שום דרך לגלות מאיפה הוא הגיע. Gitcito עושה מה שהוא יכול:
- הרשימה מתגלה מההיסטוריה, על ידי קריאת אותן שורות. כל תת־עץ שנוסף על ידי כל אחד, בכל כלי, מופיע.
- מאגר המקור וה־ref נזכרים על ידי Gitcito, בתצורת ה־git של המאגר הזה. תת־עץ שהתגלה מההיסטוריה מתחיל עם השדות האלה ריקים — מלאו אותם פעם אחת, ומשיכה ודחיפה יעבדו מכאן והלאה.
הערכים הזכורים חיים תחת gitcito.subtree.* ב־.git/config, ולכן הם נשארים עם
המאגר אבל אינם נוסעים לשכפול. שכחה מנקה אותם ולא נוגעת בשום דבר אחר.
הוספת תת־עץ
| שדה | משמעות |
|---|---|
| תיקייה | היכן הוא ינחת, למשל vendor/parser. אסור שתהיה קיימת |
| מאגר המקור | כתובת URL או נתיב בדיסק |
| ענף או תגית | מה לייבא |
| מעיכה | להכניס אותו כקומיט אחד במקום את כל ההיסטוריה שלו |
השאירו מעיכה מופעלת אלא אם יש לכם סיבה. בלעדיה, כל קומיט של הספרייה משתרג
לתוך ה־log שלכם לנצח, ו־git log מפסיק לעסוק בפרויקט שלכם.
לחיות עם זה
| פעולה | מה היא מריצה |
|---|---|
| משיכה | git subtree pull — שינויי המקור נוחתים כמיזוג לתוך התיקייה שלכם |
| דחיפה | git subtree push — השינויים המקומיים שלכם תחת התיקייה הזו חוזרים למקור |
| פיצול | git subtree split -b <branch> — מחלץ את ההיסטוריה של התיקייה עצמה לענף, כשהקבצים בשורש שלו |
פיצול הוא זה ששווה להכיר: הוא הופך תיקייה מוטמעת בחזרה להיסטוריה של מאגר עצמאי, וכך תת־עץ מפסיק להיות תת־עץ.
מגבלות ששווה להכיר
- דחיפה איטית. היא מחשבת מחדש את ההיסטוריה של התיקייה מאפס בכל פעם. במאגר גדול זה שניות עד דקות, לא מיידי, ו־Gitcito יכול רק לחכות לזה.
- משיכה היא מיזוג, ולכן היא יכולה להתנגש כמו כל מיזוג — תנחתו בפותר.
git subtreeהוא סקריפט contrib, לא פקודה מובנית של git. התקנת git מקוצצת יכולה לא לכלול אותו; Gitcito אומר זאת בפשטות במקום להעביר הלאה ״'subtree' is not a git command״.- היסטוריה שנמעכה אינה ניתנת לפריסה מחדש אחר כך. הקומיטים מעולם לא יובאו.
- Gitcito אינו ממיר תת־מודול לתת־עץ, ולא להפך.
ראו גם: מיזוג וריבייס · אינסטלציה עם ממשק