Git 2.56, מערכת ניהול קוד מקור מבוזר, שוחררה. Git מורשית תחת רישיון GPLv2+. בהשוואה לגרסה הקודמת, הגרסה החדשה כוללת 748 שינויים שהוכנו על ידי 104 מפתחים, מתוכם 39 חדשים בפיתוח Git. תכונות חדשות עיקריות (1, 2, 3):
- נוסף מצב "git add --resolved" לפתרון קונפליקטים בעת מיזוג ענפים. מצב זה בודק קבצים עבור סמני קונפליקט, ואם סמן מזוהה בקובץ אחד לפחות, מחזיר שגיאה, אינו יוצר אינדקס של קבצים ומציג רשימה של קבצים הדורשים תיקון. שלא כמו פקודה "git add --update", מצב חדש זה מעבד רק קבצים במצב קונפליקט ומתעלם מקבצים שהשתנו ושאינם קשורים לסכסוך. זה מאפשר להשלים בבטחה מיזוגי ענפים גם אם ישנן עריכות אחרות שלא הושלמו בספריית העבודה (פקודה "git add --update" הוסיפה לאינדקס את כל הקבצים שהשתנו בעבר בספריית העבודה).
- העבודה עם מאגרים גדולים הואצה משמעותית על ידי אופטימיזציה של האלגוריתם לחיפוש אחר פעולות הקומיט הנפוצות האחרונות בעת מיזוג ענפים והשוואת פעולות קומיט. התהליך מתחשב כעת בפעולות קומיט השייכות באופן בלעדי לענף אחד, מה שמאפשר לסריקה להפסיק מיד לאחר מציאת כל האבות המשותפים האפשריים, מבלי לבזבז זמן על מעבר נוסף של היסטוריית השינויים. במאגר אחד שנבדק, מהירות החיפוש גדלה בממוצע פי 20, בעוד שבאחר, המהירות הגיעה לפי 70. בעת הפעלת הפקודה "git merge-base --all v4.8 v4.9" במאגר עם הליבה Linux מספר צעדי החצייה ירד מ-167 אלף ל-3.8 אלף.
- מצב האריזה מחדש "--path-walk" הותאם לשימוש בשרת, ומאפשר יצירת קבצי pack קומפקטיים יותר על ידי קיבוץ אובייקטים לפי הנתיב שלהם בעץ הספריות (לדוגמה, עבור מאגר Fluent UI, השימוש ב-"--path-walk" הפחית את גודל קובץ ה-pack מ-558 MB ל-164 MB). הגרסה החדשה תומכת בשימוש במצב "--path-walk" בשילוב עם מפות סיביות של נגישות ואיי דלתא, המשמשים שירותי אירוח Git כדי להאיץ את העבודה ולבודד מזלגות מהמאגר הראשי.
- צווארי בקבוק שגרמו לחישובים מיותרים במאגרים גדולים בוטלו: בדיקות מצב קובץ מיותרות בעת כתיבה ל-reftable הוסרו; סריקה מחדש של הרשימה בוטלה עבור כל הוספת packfile חדשה; פעולות reftable עם רשומות מחיקה גדולות שנצברו הואצו; ביצועי git diff עברו אופטימיזציה בעת ציון הגבלות נתיבי קבצים. לאחר אופטימיזציות אלו, פעולות reftable עם מספר רב של מחיקות הואצו פי 65 (מ-13 שניות ל-0.2 שניות), ופקודת git diff הבעייתית במאגר Chromium עם 500000 פריטים באינדקס אורכת כעת 0.07 שניות במקום 8 דקות.
- הפקודה הניסיונית "git history", המספקת את היכולת לכתוב מחדש את היסטוריית השינויים, עודכנה וכוללת כעת פעולת "git history drop" להסרת ה-commit שנבחר וצירוף אוטומטי של צאצאי ה-commit האב.
- הפקודה "git branch --delete-merged 'origin/*' 'topic-*'" נוספה למחיקה בטוחה של קבוצות של ענפים מקומיים ששינוייהם כבר הועברו למאגר חיצוני. ניתן להשתמש בתווים כלליים (Wildcards) כדי לסנן ענפים ומאגרים. ניתן להשתמש בדגל "--dry-run" כדי לנתח מועמדים למחיקה מבלי לבצע את הפעולה בפועל.
- נוספה הפקודה "git refs create|update|delete|rename", המשלבת פעולות ברמה נמוכה ליצירה, מחיקה, שינוי שם ועדכון של הפניות.
- לפקודה "git bisect run" יש כעת את האפשרות "--reset-when-found=[ ]", אשר מחזירה אוטומטית את המאגר למצב בו היה לפני תחילת החיפוש, או משאירה את ה-commit הבעייתי פעיל, מבלי שיהיה צורך להריץ את הפקודה "git bisect reset" בנפרד.
- לפקודת 'git replay' יש כעת דגל '--linearize' לשימוש בטופולוגיית מיזוג שטוחה, בדומה ל-'git rebase --no-rebase-merges' אך ללא גישה לעץ העבודה.
- הפקודה "git log --follow" עוקבת כעת אחר שינויי שמות של קבצים בהיסטוריית commit לא ליניארית, כמו למשל בעת מיזוג תת-ענפים. נתיב הקובץ נרשם כעת בנפרד עבור כל commit אב, מה שהופך את התוצאה ללא תלויה בסדר שבו עוברים על היסטוריית commit.
- נוספה היכולת להשתמש בפקודה "git repack -a --filter=blob:limit=1m --drop-filtered" כדי להסיר בלובים גדולים שהורדו לפי דרישה ממאגר חיצוני שאינם בשימוש באינדקס הנוכחי. אובייקטים אלה יורדו מחדש אוטומטית בעת גישה אליהם בעתיד.
- הפקודה "git log --graph" עבור גרפים עם שורשים בלתי תלויים מרובים מוסיפה כעת הזחה כדי להפריד בבירור בין קומיטים שאינם קשורים.
- שגיאות כתיב נפוצות, כגון ציון "git push origin/main" במקום "git push origin main" או "git branch --set-upstream-to origin main" במקום "git branch --set-upstream-to=origin/main", מזוהות כעת ומוצג רמז כיצד להשתמש בגרסה הנכונה.
מקור: OpenNet.ru
