Sapling, מערכת בקרת קוד מקור תואמת Git

שְׁתִיל

Sapling מדגישה את קלות השימוש תוך כדי קנה מידה למאגרים הגדולים בעולם.

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

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

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

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

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

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

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

בתחילה, פייסבוק השתמשה במערכת Mercurial ופרויקט Sapling פותח בתחילה כתוספת ל-Mercurial. עם הזמן הפכה המערכת לפרויקט עצמאי עם פרוטוקול משלו, פורמט אחסון ואלגוריתמים משלו, שהורחב גם עם היכולת ליצור אינטראקציה עם מאגרי Git.

לעבודה, מוצע כלי השירות "sl" של שורת הפקודה, המיישמת מושגים טיפוסיים, זרימות עבודה וממשק המוכר למפתחים המכירים את Git ו-Mercurial. המינוח והפקודות ב-Sapling שונים במקצת מ-Git וקרובים יותר ל-Mercurial.

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

שיפור בולט נוסף ב-Sapling הוא זה זה מקל הרבה יותר על תהליך תיקון וניתוח שגיאות והחזרה למצב קודם. לדוגמה, הפקודות "sl undo", "sl redo", "sl uncommit" ו-"sl unmend" מוצעות להיפוך פעולות רבות, "sl hide" ו-"sl unhide" להסתרה זמנית של התחייבויות ולניווט אינטראקטיבי. קובע כי Sapling תומך גם בקונספט של מחסנית commit, המאפשרת לך לארגן סקירה שלב אחר שלב על ידי פירוק פונקציונליות מורכבת לקבוצה קטנה יותר ומובנת יותר של שינויים (ממסגרת בסיסית לתכונה סופית).

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

הקוד של רכיבים אלו המשמשים בתשתית של פייסבוק עדיין לא פתוח, אך החברה הבטיחה לשחרר אותו בעתיד. עם זאת, כבר ניתן למצוא את אבות הטיפוס של שרת Mononoke (ב-Rust) ו-VFS EdenFS (ב-C++) במאגר Sapling. רכיבים אלו הם אופציונליים ומספיק לעבוד איתו הלקוח Sapling, התומך בשיבוט מאגרי Git, אינטראקציה עם שרתים מבוססי Git LFS ועבודה עם מארחי git כמו GitHub.

הוכנו מספר תוספים עבור Sapling, כולל ממשק ReviewStack לבדיקת שינויים (קוד תחת GPLv2), המאפשר לך לעבד בקשות משיכה ב-GitHub ולהשתמש בתצוגת שינוי מחסנית.

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