
ההגעה de גיט 2.54 זה מסמן צעד חדש באבולוציה של מערכת בקרת הגרסאות הנפוצה ביותר בעולם לפיתוח תוכנה. קהילת הפרויקט, המונה למעלה מ-130 איש המשתפים פעולה במחזור זה, התמקדה בפישוט משימות נפוצות מבלי לוותר על העוצמה המאפיינת את גיט.
בין התכונות החדשות שעשויות לעניין ביותר נמצאת דרך חדשה ל לשכתב את ההיסטוריה בצורה הרבה יותר ישירה, היכולת להגדיר ווים משותפים מקבצי תצורה משותפים ושיפורים פנימיים המחפשים מאגרים מהירים וקלים יותר לתחזוקה, במיוחד בפרויקטים גדולים או ארגוניים.
גיט 2.54: סקירה כללית של הגרסה החדשה
גיט 2.54 היא גרסה ביניים בדרך לענף 3.0 העתידי, אך היא מביאה איתה שינויים המשפיעים על העבודה היומיומית של מפתחים רבים. ראשית, היסטוריית הפקודות הניסיוניות של git שוחררהמיועד לפעולות שכתוב היסטוריה פשוטות. יתר על כן, מערכת ה-hooks הורחבה ומודרנית, וכעת ניתן לנהל אותה מההגדרות; אסטרטגיית התחזוקה הגיאומטרית היא כעת ברירת המחדל.
בנוסף, שיפורים כלולים בפקודות ידועות כגון git add -p, git replay, git status או git rebaseכמו גם התאמות לתעבורת HTTP, אופן הצגת חתימות GPG, והפעולה הפנימית של מסד הנתונים של האובייקטים. למרות שרבות מהתכונות החדשות הללו הן מתקדמות, השפעתן תהיה ניכרת בזרימות עבודה נפוצות בעסקים, במנהלים ציבוריים ובפרויקטים בקוד פתוח עם מאגרים גדולים.
היסטוריית git חדשה של פקודות ניסיוניות: כתיבה מחדש קלה של commits
אחת התוספות העיקריות ב-Git 2.54 היא היסטוריית גיט, פקודה שעדיין נמצאת בניסוי, שנועדה לכסות מקרים בהם שימוש בבסיס מחדש אינטראקטיבי הוא מוגזם. עד כה, הכלי המועדף לשינוי ההיסטוריה המקומית היה git rebase -i, גמיש מאוד אך גם מורכב יותר ונוטה להשאיר את המשתמש במצבים סותרים שיש לפתור אותם באופן ידני.
עם היסטוריית גיט גישה ישירה יותר מבוקשת עבור משימות ספציפיות: לדוגמה, תיקון שגיאת כתיב בהודעה של קומיט מלפני כמה שינויים, או פיצול קומיט שהפך גדול מדי לשניים. הרעיון הוא להציע דרך מבוקרת לכוונן את ההיסטוריה מבלי להגדיר את כל המנגנון של ריבסט אינטראקטיבי עם רשימות משימות וצעדי ביניים.
פקודת משנה מחדש: כוונון הודעות commit מבלי לגעת בעץ העבודה
המצב הראשון שהסדר החדש משיק הוא git history reword <commit>כאשר גיט מופעל, הוא פותח את העורך שתצורתו נקבעה על ידי המשתמש עם הודעת commit שצוינהמה שמאפשר לך לשנות אותו ישירות. כשאתה שומר וסוגר את העורך, גיט כותב מחדש את ה-commit הזה ומעדכן אוטומטית את הענפים היורדים ממנו כדי להצביע לגרסה החדשה.
ההבדל העיקרי בהשוואה לריבוי אינטראקטיבי הוא ש `git history reword` לא נוגע לא בעץ העבודה ולא באינדקסזה רק מעדכן את ההיסטוריה. זה הופך אותו לשימושי במיוחד בסביבות אינטגרציה רציפה או סקריפטים אוטומטיים, מכיוון שהוא יכול לפעול אפילו על מאגרים פשוטים, דבר נפוץ בשרתי קוד פנימיים של חברות או מוסדות שבהם אין עץ עבודה משויך.
פקודת משנה split: פיצול אינטראקטיבי של commit
המצב השני, git history split <commit>זה מיועד למצבים בהם commit יחיד מכיל שינויים שיש להפריד ביניהם. כאשר הוא מבוצע, Git מציג את ה-hunks הקשורים ל-commit זה ומאפשר לך לבחור אילו מהם יש לחלץ ל-commit אב חדש, בדומה לאופן שבו `git extract` עובד. git add -p כאשר מחליטים אילו קטעי קוד להוסיף לאינדקס.
לאחר בחירת הפרגמנטים, גיט יוצר קומיט חדש עם החתיכים שנבחרו כהורה של המקורהוא שומר את השינויים שלא נבחרו ב-commit הקודם. לאחר מכן, הוא כותב מחדש את ענפי הצאצאים כדי להצביע על מבנה ההיסטוריה החדש. שוב, הפעולה פועלת מבלי לשנות את התוכן הנוכחי של עץ העבודה, מה שמפחית את הסבירות להשאיר את המאגר במצב ביניים מסובך.
מגבלות ותאימות עם זרימות עבודה אחרות
כדי לשמור על התנהגות ניתנת לשליטה, היסטוריית git אינה תומכת בהיסטוריה עם קומיטים של מיזוג ומסרב להמשיך אם הפעולה גורמת לקונפליקטים במיזוג. הוא מיועד להתאמות קלות, לא לכתיבה מחדש מסיבית כמו אלו שבדרך כלל מטופלות עם git rebase -i או אסטרטגיות ניקוי היסטוריה אגרסיביות יותר.
באופן פנימי, הפיקוד מסתמך על המנגנון של משחק גיטאשר התאחד ככלי ניסיוני לשחזור קומיטים על בסיס אחר מבלי לגעת בעץ העבודה. חלק מעבודה זו כלל חילוץ לוגיקה זו לספרייה משותפת, כך ששניהם git history מכיוון שפונקציונליות עתידית אחרת יכולה להפיק תועלת מתשתית מודולרית יותר שקל יותר להפוך אותה לאוטומטית מסקריפטים או כלים של צד שלישי.
ווים מבוססי תצורה: שיתוף ושילוב של אוטומציות
תכונה חדשה בולטת נוספת של Git 2.54 היא היכולת ל הגדירו ווים ישירות בקבצי התצורה, במקום להסתמך אך ורק על סקריפטים המוצבים בספרייה .git/hooks או במסלול המסומן על ידי core.hooksPathשינוי זה מקל מאוד על שיתוף צ'קים בין מאגרים שונים מבלי שיהיה צורך לשכפל קבצים באופן ידני.
עד כה, כדי להחיל, למשל, מעצב קוד או מנתח סודות לפני כל commit במספר פרויקטים, היה צורך להעתיק את סקריפט ה-hook לכל מאגר או להשתמש בכלי ניהול hook חיצוניים. עם הגישה החדשה, ניתן להגדיר ווים מרכזיים ב ~/.gitconfig או ב /etc/gitconfig תאגידיים וכי אלה יוחלו במידת הצורך.
הגדרת ווים לפי תצורה ופקודות מרובות לכל אירוע
התחביר החדש מבוסס על מפתחות תצורת סגנון hook.<nombre>.command y hook.<nombre>.eventהראשון מציין איזו פקודה תבוצע, והשני מציין איזה אירוע וו מפעיל אותולדוגמה א pre-commit או pre-pushמכיוון שמדובר בתצורה סטנדרטית, הגדרות אלו יכולות להתקיים במקביל ברמות שונות: משתמש, מערכת או מאגר.
יתר על כן, גיט מאפשר כעת זאת מספר ווים מוקצים לאותו אירועבמילים אחרות, ניתן להגדיר, לדוגמה, סורק אישורים שירצו על כל אחד מהם. pre-commitמבלי שיהיה צורך לשלב אותם ידנית לסקריפט יחיד. Git עובר על ערכי התצורה לפי הסדר ומבצע כל פקודה, תוך שמירה על תמיכה בסקריפט הקלאסי. $GIT_DIR/hooks, אשר ממשיך לפעול בסוף כדי לא לשבור תצורות קודמות.
ניהול, ביטול ומודרניזציה פנימית של ווים
כדי לבדוק אילו ווים פעילים ומהיכן הם מגיעים, משולבת הפקודה הבאה git hook listאשר מראה את מקורו של כל אחד מהם, משהו שימושי בעת ניהול תצורות מרכזיות בסביבות ארגוניות, אם מאגר ספציפי צריך לא לכלול hook שעבר בירושה מקובץ גלובלי, מספיק להגדיר hook.<nombre>.enabled = false, מבלי שיהיה צורך למחוק או לשנות את התצורה המקורית.
מתחת למכסה המנוע, לגיט יש מאוחד ומודרני באופן שבו הוא מטפל ברבים מה-hooks הפנימיים שלומספר נקודות אינטגרציה שבעבר נוהלו באמצעות נתיבי אד-הוק, כגון ווים עבור pre-push, post-rewrite או אלה של receive-packכעת הם משתמשים בממשק ה-API החדש של hooks. זה לא רק מביא עקביות, אלא גם מקל על סביבות אינטגרציה רציפה או פלטפורמות יצירת קוד להסתגל לשינויים עתידיים מבלי שיהיה צורך לכתוב מחדש אינטגרציות ספציפיות.
תחזוקה גיאומטרית כאסטרטגיית ברירת מחדל
בגרסאות קודמות, גיט הציגה את מה שנקרא אסטרטגיה גֵאוֹמֶטרִי דנטרו git maintenanceאסטרטגיה זו, שנועדה להפחית את עלות האריזה מחדש של משימות במאגרים גדולים, מנתחת packfiles קיימים ומחפשת שילובים היוצרים סדרה גיאומטרית לפי מספר אובייקטים, תוך דחיסת תוכנם מבלי צורך לבצע איסוף אשפה מלא בכל פעם.
עם גיט 2.54, גישה זו הופכת ל אפשרות ברירת המחדל לתחזוקה ידניתכאשר זה פועל git maintenance run מבלי לציין את האסטרטגיה, נבחרת אוטומטית הגישה הגיאומטרית, במקום לפנות ישירות למשימה הקלאסית של gc שמנסה לקבץ הכל לחבילה אחת.
בפועל זה אומר את זה מאגרים מתוחזקים בצורה יעילה יותר מלכתחילה, זה מעניין במיוחד עבור פרויקטים עם היסטוריה ארוכה או עבור ארגונים המנהלים מאגרים חד-גוניים גדולים. האסטרטגיה הגיאומטרית משלבת חבילות מצטברות כאשר זה הגיוני ורק פונה ל... gc יושלם כאשר הוא עומד למעשה לאחד הכל לתוך קובץ packfile יחיד. במהלך התהליך, גרף ה-commit, רשימות ה-reflog ומבני עזר אחרים נשמרים מעודכנים.
אלו שכבר הגדירו maintenance.strategy = geometric הם לא ישימו לב לשינויים, שכן העדפה זו מכובדת. ואלו שמעדיפים להמשיך בגישה המסורתית יכולים לכפות את האסטרטגיה gc הגדרת תצורה maintenance.strategy = gcובכך לשמור על תאימות עם זרימות שמרניות יותר.
שיפורים בפקודות אינטראקטיביות וניסיוניות
מעבר לתכונות החדשות העיקריות, גיט 2.54 מביאה מגוון רחב של שינויים שמטרתם שיפור חוויית המשתמש היומיומיתבמיוחד בפקודות המשמשות באופן אינטראקטיבי לניהול שינויים.
חידודים ב-git add -py אפשרויות ניווט חדשות
המצב האינטראקטיבי של git add -p ופקודות קשורות מקבלות שיפורי שימוש שונים. בעת ניווט בין פקודות באמצעות המקשים J y Kגיט מראה כעת אם פרגמנט התקבל או דילג עליו בעברהימנעות מהצורך לזכור ידנית כל החלטה.
האפשרות נוספה גם כן --no-auto-advanceמה שמשנה את ההתנהגות בעת סיום עם קטעי קובץ. במקום לעבור אוטומטית לקובץ הבא, הסשן נשאר על הקובץ הנוכחי, מה שמאפשר לך להשתמש < y > כדי לעבור בין קבצים בצורה רגועה יותר. דרך עבודה זו שימושית כאשר ברצונך לסקור את מבחר השינויים בכללותו לפני אישורם.
הפעלה חוזרת של git: יותר בגרות לביצוע מחדש של commits
הסדר הניסיוני משחק גיטהתכונה שנועדה לשכפל קומיטים על בסיס חדש מבלי לשנות את עץ העבודה ממשיכה לצבור יכולות. בגרסה זו, היא מבצעת כעת עדכון אטומי של הפניות כברירת מחדל, במקום פקודות dumping update-ref על תפוקה רגילה.
בנוסף, הוא משלב מצב --revert מאפשר לבטל את השינויים ממגוון של קומיטיםהוא מסוגל להיפטר מקובצי commit שמתרוקנים במהלך התהליך וכעת תומך בהפעלה חוזרת של ההיסטוריה חזרה לקובץ ה-root. שיפורים אלה משתלבים היטב עם השימוש ב- git history, אשר מסתמך על אותה תשתית כדי להציע חוויה בטוחה יותר.
אפשרות חדשה - טריילר ב-git rebase
תיקון מעניין נוסף הוא הוספת --trailer en git rebaseאשר מנצל את ההיגיון של interpret-trailers סעיף הוסף את אותו טריילר לכל קומיט של אוברשוטבמקום לבנות פקודות ארוכות עם -x וקורא ל git commit --amend --no-edit --trailer=...ניתן לציין ישירות את הגרור הרצוי בעת הפעלת הגלישה.
זה מפשט מאוד משימות חוזרות ונשנות כמו שילוב שורות טקסט Reviewed-by: או הערות הדומות לסדרה של commits, משהו נפוץ בתהליכי סקירת קוד פורמליים המשמשים בצוותים מבוזרים.
ניהול תעבורת HTTP וחתימות: התנהגות מעודנת יותר
מבחינת תקשורת רשת, Git 2.54 מציג שינויים רלוונטיים בטיפול בתגובות HTTP ובפרשנות של חתימות קריפטוגרפיות הקשורות ל-commits ותגים.
ניהול תגובות HTTP 429 וניסיונות חוזרים הניתנים להגדרה
תעבורת ה-HTTP של גיט לומדת לפרש נכון את הקודים 429 «יותר מדי בקשות»עד עכשיו, כאשר שרת החזיר שגיאת 429, זה נחשב לשגיאה חמורה והפעולה נכשלה. החל מגרסה זו, גיט יכול לנסות שוב את הבקשה תוך כיבוד ערך הכותרת. Retry-After אם קיים, או באמצעות השהייה הניתנת להגדרה דרך האפשרות החדשה http.retryAfter.
ההתאמות נוספו גם כן http.maxRetries y http.maxRetryTime, המאפשרים לשלוט במספר הניסיונות החוזרים המרבי ובזמן הכולל המושקע בהםזה פרקטי בסביבות ארגוניות שבהן נדרשת גישה לשרתים עמוסים או לשרתים עם מדיניות הגבלת בקשות מחמירה, מה שעוזר לייעל את הפעילות. fetch y push להיות עמיד יותר מבלי להעניש את השרת.
טיפול בחתימות GPG עם מפתחות שפג תוקפם
בנוגע לאבטחה, תוקנה התנהגות שעשויה להיות מטעה: כאשר חתימה על קומיט נחתם עם מפתח GPG שפג תוקפו לאחר מכן, גיט הציגה את החתימה ב צבע אדום מדאיגזה מצביע על כך שהחתימה אינה חוקית. עם זאת, אם החתימה הייתה תקפה באותו זמן, תוקף זה אמור להישאר גם אם המפתח פג תוקפו מאז.
גיט 2.54 מתקן את הלוגיקה הזו וממשיך לשקול חתימות שבוצעו כהלכה לפני שפג תוקף המפתח הן תקפות.זה מונע התראות מיותרות. זה מספק תמונה מדויקת יותר של היסטוריית המאגר, דבר שרלוונטי לפרויקטים בעלי מחזורי חיים ארוכים, כגון תוכנה מוסדית או ממשל ציבורי המתוחזקת במשך שנים רבות.
יכולות בדיקה חדשות והתאמה אישית של היסטוריה
מספר פקודות שנועדו לחקור היסטוריה מקבלות שיפורים המגדילים את הגמישות שלהן ומאפשרים תפוקות מותאמות אישית יותר לכל מקרה.
`git log -L` משתלב עם מכונות הבדל סטנדרטיות
אפשרות git log -Lהפונקציה המאפשרת מעקב אחר התפתחות של טווח שורות בקובץ ספציפי יושמה מחדש כדי לנתב את הפלט שלה דרך ה- מנגנון הבדלים סטנדרטי של Gitבעבר, הוא השתמש בנתיב משלו, מה שהפך אותו ללא תואם לאפשרויות שימושיות מאוד כמו -S y -G (מה שנקרא "מכושים"), או עם פורמטים שונים של טלאים.
עם השינוי שהוכנס ב-Git 2.54, -L הופך תואם עם חיפושי תוכן מתקדמים ופורמטים שוניםכולל --word-diff o --color-movedבדרך זו, ניתן להגביל את הפלט לפונקציה ספציפית, ובמקביל לסנן אותו רק עבור commits שמוסיפים או מסירים סמל ספציפי, מה שמקל על ביקורות קוד וניתוח רגרסיה.
האשמה בגיט עם בחירת אלגוריתם diff
הפקודה גיט אשמה, משמש כדי לראות איזה קומיט הציג כל שורה בקובץ, לומד אפשרות חדשה --diff-algorithmזה מאפשר לך לבחור בין אלגוריתמים שונים של הבדלים, כגון היסטוגרמה, סבלנות או מינימלי, בעת חישוב ייחוס שורות.
בהתאם לסוג השינויים שעבר הקובץ, בחירה באלגוריתם אחד על פני אחר יכולה להציע תוצאות ברורות יותרזה מפחית רעש בהיסטוריית קוד פעילה מאוד. בסביבות בהן סקירות מפורטות מוערכות מאוד, רמת בקרה זו יכולה לעשות את כל ההבדל כשבודקים מי הכניס בלוק קוד מסוים.
אופטימיזציה של אחסון ומסדי נתונים של אובייקטים
השינויים בגרסה זו אינם מוגבלים לממשק המשתמש; נעשתה גם עבודה ניכרת על אופן פעולתו של גיט. מארגן ומגיש נתונים באופן פנימייש לכך השפעה משמעותית במיוחד על מאגרים גדולים.
מדדי חבילות מרובות מצטברים ודחיסה
השיחות אינדקסים מצטברים של חבילות מרובות (MIDX)עם תכונות שכבר שופרו בגרסאות קודמות, גיט 2.54 כולל כעת תמיכה בדחיסת שכבות. מנגנון זה משלב שכבות MIDX קטנות יותר, יחד עם מפות הסיביות הנגישות הנלוות אליהן, כדי לשמור על שרשרת השכבות בגודל סביר.
שלב זה חשוב עבור הפיכת MIDX מצטבר לפרקטי במאגרים ארוכי חייםכמו אלו של ארגונים גדולים או פרויקטים קהילתיים עם היסטוריה של שנים רבות. דחיסת השכבות מפחיתה את מורכבות החיפושים ומשפרת את הביצועים בפעולות כגון fetch, clone בדיקות חלקיות או היסטוריות.
ארגון מחדש של מסד נתונים של אובייקטים (ODB)
באופן פנימי, א עיבוד מחדש עמוק של ממשק ה-API של מסד הנתונים של האובייקטים (ODB). כעת נעשה שימוש בעיצוב backend הניתן לחיבור, שבו פונקציות כגון read_object(), write_object() o for_each_object() הם נשלחים באמצעות מצביעי פונקציה לפי מקור.
למרות ששינוי זה אינו גלוי באופן מיידי למשתמש הקצה, הוא מניח את היסודות עבור מערכות אחסון חלופיות עתידיות או תצורות גמישות יותר של מסד נתונים של אובייקטים. עבור חברות עם דרישות תאימות רגולטוריות ספציפיות או אינטגרציה עם מערכות האחסון שלהן, מודולריות זו יכולה לפתוח את הדלת לפתרונות מותאמים אישית יותר.
שיפורים בסטטוס, כינויים, מילוי חוזר ופרטים נוספים
גיט 2.54 משלבת גם מספר התאמות אשר, למרות שהן קטנות יותר, תורמות לשיפור השימוש היומיומי ולהתאמת גיט להקשרים לשוניים ורשתיים מגוונים.
סטטוס git והשוואה עם מספר ענפים מרוחקים
הפקודה מצב git מציג את אפשרות התצורה status.compareBranchesכברירת מחדל, פקודה זו הציגה כיצד הענף הנוכחי השווה לענף המעלה המוגדר שלו, משהו טיפוסי כמו origin/mainעם האפשרות החדשה, ניתן לבקש השוואה עם סניף הדחיפה, או עם שניהם בו זמנית.
פונקציונליות זו נועדה ל זרימות משולשות, נפוץ בעבודה עם forks: ניתן להוריד משלט רחוק רשמי ולשלוח שינויים לשלט רחוק אחר, תוך שמירה ברורה בכל עת על מספר הקומיטים המפרידים בין כל ענף, מה שמפחית הפתעות בעת סנכרון מאגרים.
שם בדוי עם תווים בינלאומיים
עד כה, כינויי גיט היו מוגבלים לתווים אלפאנומריים ומקפים מסוג ASCII, מה שמנע שימוש בשמות בשפות אחרות עם מבטאים או אלפביתים שונים. התחביר החדש תומך כמעט בכל תו למעט מעברי שורה ו-NUL. ההתאמה מתבצעת כבייטים גולמיים ותלוית רישיות. יתר על כן, מערכת ההשלמה האוטומטית של המעטפת עודכנה כדי לטפל בכינויים אלה, מה שהופך את Git לקל יותר לשימוש בצוותים רב-לשוניים.
מילוי חוזר של גיט פרקטי יותר בשכפולים חלקיים
הפקודה הניסיונית מילוי חוזר של גיטהפקודה המשמשת להורדת בלובים חסרים בשכפולים חלקיים גם היא מתחזקת. בעבר, הפקודה תמיד אחזרה בלובים נגישים מ HEAD לאורך כל העץ, דבר שיכול להיות מוגזם במאגרים גדולים במיוחד.
גיט 2.54 מוסיפה תמיכה עבור סקירת ארגומנטים ומפרט נתיביםכך שניתן יהיה להגביל את המילוי החוזר לטווח היסטורי (לדוגמה, main~100..main) או למסלולים ספציפיים מסוימים (git backfill -- '*.c'), כולל תבניות של תווים כלליים. זה הופך את העבודה עם שכפולים חלקיים גדולים להרבה יותר נוחה, שבהם צריך רק להשלים את ההיסטוריה של חלק ספציפי בקוד.
התאמות נוספות ושיפורים מפורטים
יומן השינויים של גיט 2.54 כולל רשימה ארוכה של שיפורים קטנים. ביניהם תיקון לאלגוריתם diff. היסטוגרמהאשר כעת מונע משלב הדחיסה להזיז קבוצות של שינויים באופן ששובר את קווי העוגן שנבחרו, ומייצר הפרשים נקיים ופחות מיותרים.
כלים כגון git config list , אשר מתבססת כדרך הרשמית לרשום תצורה, git merge-file אשר לאחר מכן מכבד את התצורה הזמינה גם מחוץ למאגר, וכמה כלי עזר קשורים git send-emailאשר מקבלים תמיכה בתעודות לקוח וטיפול זהיר יותר במערכות תווים שנבחרו על ידי המשתמש.
האבולוציה של גיט ממשיכה בקצב טוב עם גרסה 2.54, המשלבת שיפורים גלויים עבור המשתמש, כמו הסדר החדש git history או ווים הניתנים להגדרה, הדורשים עבודה משמעותית על התשתית הפנימית של המערכת. כל זה מצביע על מערכת אקולוגית חזקה וגמישה יותר, המוכנה טוב יותר לאתגרים של מאגרים גדולים יותר ויותר וצוותים מגוונים יותר.
