מאגר והיסטוריה

סייר האובייקטים

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

⌘K ← סייר האובייקטים. שום דבר בעמוד הזה לא יכול לשנות בייט — כל קריאה מאחוריו היא קריאה בלבד.

השדות של קומיט, עם העץ וההורים שלו כקישורים, לצד רשימת ה־refs

ארבעת האובייקטים

אובייקט מה זה מה הוא יודע
blob התוכן של קובץ כלום. לא את שמו, לא את נתיבו, לא את ההיסטוריה שלו
tree רשימת תיקייה שמות, מצבים, וה־sha של כל בלוב או עץ בן
commit תמונת מצב אחת העץ שלו, ההורים שלו, המחבר, המקמט, ההודעה
tag תגית מבוארת האובייקט שהיא מצביעה עליו, המתייג, הודעה

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

ref — refs/heads/main, refs/tags/v1.0, HEAD — הוא סתם קובץ שמכיל sha. זה כל מה ש״הסתעפות היא זולה״ אומר.

הליכה

העמודה השמאלית מונה כל ref במאגר, מקובץ כמו ש־git מקבץ אותם. לחצו על אחד כדי לנחות על האובייקט שהוא נוקב בשמו.

משם הכול הוא קישור:

  • קומיט מציג את ה־tree שלו ואת כל parent — לחצו כדי לעבור אל תמונת המצב, או אחורה בהיסטוריה קומיט אחד בכל פעם.
  • עץ מונה את הרשומות שלו עם מצב, סוג, sha וגודל. לחצו על שם כדי לפתוח את הבן הזה.
  • בלוב מציג את הטקסט שלו (את ראשו, לכל דבר גדול), או אומר זאת בפשטות כשהוא בינארי.
  • תגית מבוארת מציגה על מה היא מצביעה — לחצו כדי לעבור לקומיט.

חזרה משחזרת את צעדיכם.

הקלדת רוויזיה

התיבה מקבלת כל מה ש־git rev-parse מקבל, וכאן זה מפסיק להיות דפדפן ומתחיל להיות דרך ללמוד:

הקלידו את זה כדי לקבל
HEAD את הקומיט הנוכחי
HEAD~3 שלושה קומיטים אחורה
HEAD^{tree} את העץ של אותו קומיט, קלוף
HEAD:src/app.ts את הבלוב של הנתיב הזה, ישירות
v1.0^{} את מה שתגית מבוארת מצביעה עליו, במקום את אובייקט התגית
a1b2c3d כל אובייקט, לפי sha — קיצורים עובדים

ספרות המצב ברשימת עץ שוות הכרה: 100644 קובץ, 100755 קובץ הרצה, 040000 תת־עץ, 120000 קישור סימבולי, 160000 gitlink של תת־מודול — והאחרון הוא כל מה שתת־מודול שומר.

מגבלות ששווה להכיר

  • לקריאה בלבד, בכוונה. אין כאן במה לכתוב. יצירת אובייקטים ביד היא תרגיל של git hash-object, ומקומה בטרמינל.
  • בלובים גדולים נחתכים אחרי 200 הקילו־בייט הראשונים — מספיק כדי לראות מה זה, לא מספיק כדי לתקוע את החלון.
  • הגדלים הם גודל התוכן של האובייקט כפי ש־git cat-file -s מדווח אותו, ולא מה שהוא עולה בדיסק אחרי אריזה. לשם כך ראו תחזוקה.
  • אובייקטים בלתי נגישים הם עדיין אובייקטים. הדביקו sha מדוח משתלשלים של git fsck והוא ייפתח, וזו לעתים קרובות הדרך המהירה ביותר לראות מה הכיל קומיט אבוד לפני שמחליטים אם לשחזר אותו.

ראו גם: הגרף · תחזוקת המאגר · שחזור

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