Git ולא Repudiation, Revisited
מאמר זה באמת מתייחס DVCS באופן כללי, לא רק git כשלעצמו. אבל אנחנו נתמקד תשומת לב על git כי זה נשאר הפופולרי ביותר DVCS סביב היום.
עם כלי מסורתי לבקרת גרסאות מרוכזות, רשומות כאלה זמינות בקלות מהיסטוריית ה-commit. כל התחייבות למערכת עוברת דרך מנגנון אישור כדי להבטיח שהאדם שביצע את השינוי מורשה להעלות אותו. רשומות אלה חיוניות לארגון כדי להבטיח שרשומות מדויקות נשמרות אשר מצביעות על מי אחראי להעלאת כל שורת קוד לתוכנה המדוברת.
עם git, או בקרת גרסה מופצת באופן כללי, יש הבחנה ברורה בין ההיסטוריה של “מחויבות” לבין ההיסטוריה “העלאה” — מה שאני מכנה כאן “דחיפת רשומות”. ביצועי commit ב-git אינם מאומתים, כיוון שהם מתרחשים באופן מקומי, כאשר נתוני מטאדטה מקומיים ולא מאומתים נוספו להיסטוריה. שלב ההעלאה, aka דחיפת Git
למה זה חשוב? ובכן למתחילים הרשו לי להתייחס לתפיסה שגויה נפוצה לגבי הצורך בהסכמי רישיון של תורם תוכן (ICLAs) עבור התחייבויות של אפאצ’י. נראה שאנשים רבים אינם מבינים שבכל הנוגע ליצירותיו האישיות של המחבר, אין הבדל בין השפה הרלוונטית בשפה הרלוונטית. הסכם רמת שירות (ICLA) וגם the רישיון אפאצ’י 2.0.
מה שרשומות דחיפה מספקות אז היא דרך לעקוב אחורה, לכל שורת קוד במהדורה, ה-committer היחיד שאחראי לדחיפת הקוד הזה למאגר git של ה-ASF. זה חשוב באופן ביקורתי בקביעת ההוכחה של תרומה של צד שלישי עם git, כי זה למרבה הצער אפשרי עבור תורם כזה “ללכת” מתרומתו לפרויקט git בגלל האופי המופץ של יומני התחייבות DVCS. הצד האחראי, על פי ה-ICLA, הופך לקומיטר שדחף את הקוד.
אסטרטגיות הפחתה מוקדמות ונכונות סובבות סביב הסרת התרומה הנטושה, אך ייתכן שהנזק לפרויקט כבר נעשה. ובלי רשומות הדחיפה, פשוטו כמשמעו, לא היה לנו תהליך סמכותי לקביעת האופן שבו קוד זה נכנס בפועל לתוך repo שלנו, מלבד טרבול דרך רשומות חלופיות במעקב בעיות או תקשורת ברשימה. הסתמכות על יומני מחויבות מיזוג בלבד לקביעת מקור אינה מספקת במיוחד מנקודת מבט אבטחה, מכיוון שהיא דורשת עמידה נוקשה בסוג מסוים של תהליך עבודה, שאיננו רוצים להכתיב לו.
ללא דברים כאלה היינו צריכים לחייב לפחות חתימת PGP של כל התחייבות של תורם, וזה מכוער עבור פרויקטים רבים. רשומות דחיפה מספקות תהליך שקוף שאינו משפיע על תהליך העבודה של פרויקט, פרט להבטחת ה-Git repo של ASF הוא ה-Master repo האמיתי.
עדכון מס’ 2025
ל-Git יש תמיכה מקורית עבור SSH-SK-ED25519@openssh.com
הנפח והמורכבות המיותרים של תשתית PGP מלאה אינם רלוונטיים עוד לפתרון סוגיות אי-הדחייה שנדונו לעיל, ברחבי הארגון או ברמה לכל פרויקט. ושילוב GitHub הנחמד מקל על המאמץ הזה במלואו.