Git bisect: כיצד לזהות באג בקוד שלך?



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

הקוד שלי עבד בסדר עד אתמול, אך לא עד שמשיכה אחרונה מהמאגר המרוחק שברה את הקוד !!!

אם אתה נמצא במצב דומה ולא יודע איזה שינוי שבר את הקוד אוֹ Who מתוך תורמים רבים בעלים של זֶה באג / תכונה ואז git bisect הוא הדרך החוצה שלך. אז, במאמר זה על git bisect תוכלו ללמוד כיצד ה 'git bisect'פקודה באה אל הצלה בזיהוי ההתחייבות הגרועה הראשונה שמציגה את הבאג באמצעות אלגוריתם החיפוש הבינארי.

הנושאים המכוסים במאמר זה הם כדלקמן:





מדוע להשתמש בגיט ביסקט?

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



לכן, כדי להימנע מתרחישים כאלה, תוכלו להשתמש ב-git bisectפקודה למצוא את גרסת הפרויקט הגרוע (או תמונת המצב) ובסופו של דבר לתקן אותה באמצעותgit revertפקודה.

איך חיפוש 'git bisect'?



פקודה זו bisects (מחלק) את ההיסטוריה שלך בין טוֹב וה רַע לְבַצֵעַ טווח. זה מצביע על שלך נוֹכְחִי פּרוֹיֶקט מדינה אל א אמצע טווח לְבַצֵעַ תמונת מצב. פקודת git bisect עוברת לאחר מכן כל מזהה התחייבות בין טווח זה בזמן מושהה בכל תמונת מצב כדי לאפשר לך לבדוק את הקוד . אם הבאג קיים, אתה מצהיר על ההתחייבות כ- רַע, אם לא כמו טוֹב אלא אם כן החיפוש מסתיים.

תחביר

git bisect

כדי להבין טוב יותר את git bisect, בואו ניצור פרויקט שמפתח את הקוד לאפליקציית ניווט פשוטה לשימוש במכונית.

הגדרת פרויקט ראשונית

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

שלב 1: צור ספריה חדשה בתיקיית $ HOME שלך:

cd $ HOME mkdir my_nav_app

שלב 2: נווט לספרייה החדשה:

cd $ my_nav_app

שלב 3: שיבוט להורדת הפרויקט מדף GitHub שלי:

שיבוט git https://github.com/divyabhushan/my_nav_app.git

כעת, הבה נבין את ספריות הפרויקט ואת פריסת הקבצים, כפי שמודפסים על ידי הפקודה:ls -lTR

פריסת קוד המקור - Git Bisect - Edureka

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

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

כיצד להרכיב תוכניות Java

git alias.hist 'log --pretty = פורמט:'% C (צהוב)% h% Creset% ad | % C (ירוק)% s% Creset% C (אדום)% d% Creset% C (כחול) [% an] '- גרף - דקורציה - תאריך = קצר'

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

  • צור סניף 'dev': [מאסטר] $git branch dev
  • עבור לסניף 'dev': $git checkout dev
  • רשום את יומני ההיסטוריה: [dev] $עבור היסט[הערה: הפקודה 'כינוי' משמשת כאן]

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

אז, עכשיו, כשאנחנו יודעים את ההתחייבות הטובה האחרונה שלנו, בואו נמשיך במאמר זה בנושא 'git bisect' ונבדוק את היישום.

בדוק את היישום

הפעל את התסריט כ - $./scripts/myApplication.sh[בודק לראשונה]



ברור שמצב הפרויקט הנוכחי שלי נמצא שְׁגִיאָה , ואני לא בטוח איזה שינוי ביצעתי באיזה התחייבות שהכניס את השינוי הזה. אז, הבא במאמר זה על git bisect, הבה נראה כיצד ניתן לזהות את ההתחייבות הרעה.

זיהוי ההתחייבות הרעה

כדי להתחיל לבדוק את ההתחייבות הגרועה, פעל לפי הצעדים הבאים:

  • התחל את פקודת החצייה :התחל לחתוך
  • ציין את מזהה ההתחייבות הרע: git bisect רע רעאוֹgit bisect c5b3ca8
  • הזכר את המזהה הידוע-טוב-התחייבות האחרון: git bisect טוב v1.0אוֹgit bisect 93859d8

זה מחצה את טווח ההיסטוריה המחויבת בערך באמצע הדרך בין המחויבות הטובה והרעה שמביאה אותנו לזהות ההתחייבות: f61a7e8

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

פקודה להריץ את היישום : $./scripts/myApplication.sh[בודק פעם שנייה]


מאז הבקשה עבר בהתחייבות זו, ההתחייבות הזו היא בהחלט לא ההתחייבות הרעה. אז, הבא, אתה צריך ליידע את אותו הדבר לפקודה bisect כמו - $git bisect טוב


כעת, זה יצמצם עוד יותר את תוצאת החיפוש למחצית הראשונה של הטווח כפי שמוצג -


בדוק את היישום שלך שוב - פקודה: $./scripts/myApplication.sh[בודק פעם שלישית]


לכן, מכיוון שאנו רואים שגיאה כנ'ל, זוהי התחייבות גרועה.

יידע את פקודת החצייה, הפעל $git bisect רע


זה מצמצם עוד יותר את החיפוש ומביא אותך לתיקון האמצע הכחול האחרון שמוקף: a6ac769

לכן, אני בודק את היישום שלי בפעם האחרונה באמצעות אותה פקודה: $./scripts/myApplication.sh[בודק פעם רביעית]

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

הפעל את הפקודה: git bisect רע

נמצאה התחייבות גרועה

זה מסכם את ההתחייבות האחרונה שנותרה שהיא גרועה-


אז אתה יודע שכאן נשבר הקוד. מה הלאה?

להבין איזה קובץ היה עם הבאג

במקרה זה, הפלט נותן לך מידע מינימלי על ה- התחייב מזהה , שם המחבר , וה תאריך מחבר ביחד איתי להעביר מסר וה נָתִיב שונו.

אם ברצונך לבצע ניפוי שגיאות נוסף עליך לקרוא ה לבצע אובייקט מזהה .

פקודה: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

כיצד להפוך את מיתרי הפיתון - -

פעולה זו תקרא את אובייקט ההתחייבות ותדפיס את הודעת היומן ואת ההבדל הטקסטואלי.

אתה יכול באותה מידה להשתמש בפקודה 'git blame' כדי לנתח כיצד ובאיזה התחייבות כל שורה שונה על ידי איזה מחבר, הפעל את הפקודה כ:קוד האשמת git / develop_nav.sh

הפסיקו את החיפוש

כדי להפסיק את החיפוש, השתמש בפקודה הבאה:

פקודה: לאפס git bisect


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

כיצד לתקן / לאתר את הקוד?

ובכן, יש כמה דרכים לעקיפת הבעיה שתוכלו לעשות כדי לתקן את המצב הנוכחי של הפרויקט כעת לאחר שזיהיתם את ההתחייבות שהביאה את הבאג מלכתחילה.
עם זאת, אם אתה משנה התחייבות על מאגר משותף עדיף לַחֲזוֹר השינוי באמצעות ' git revert ' פקודה.

מְשִׁימָה: השב את השינויים שנעשו על ידי ההתחייבות הרעה שהוזכרה

פקודה: git revert a6ac769

כתוצאה מכך, ביטול השינויים שביצעה התחייבות זו עשה 2 דברים:

  • זה מחק את שלושת השורות האחרונות שנוספו (מסומן בירוק) והוסיף את השורה שנמחקה (מסומנת באדום) בחזרה. (הפוך של a6ac769)
  • יצר התחייבות נוספת עם פרטי ההודעה החוזרת

'פקודת השבת מקלה גם על המעקב אחר השינוי שחזרת מההתחייבות המקורית'

להשתמש ב 'הופעה' פקד שוב לקרוא את מזהה האובייקט, כמו כך-

פקודה: מופע גיט 801f029

עכשיו, קדימה ובדקו את היישום. זה יבוצע כמו שצריך.

פקודה: $./scripts/myApplication.sh

לעומת זאת, אם ברצונך להסיר את ההתחייבות הרעה מההיסטוריה:

  • אתה יכול להשתמש ב' איפוס git 'פקודה עם '--קָשֶׁה”אפשרות (אם כי לא מומלצת במאגר משותף).

  • בדוק גרסה קודמת של קובץ יחיד באמצעות 'קופת git'פקודה עם'-'אפשרות.

יש לציין, זה רק יבצע שינויים במאגר המקומי שלך עד שתדחוף את השינויים למאגר מרוחק. מכיוון שחלק מהשינויים יוצרים מזהה אובייקט התחייב חדש כמו במקרה שלנו לעיל במקרים כאלה דחיפה רגילה למאגר המרוחק נדחית מכיוון שההיסטוריה הייתה שונה. עליך להשתמש בסמל ' דחיפת גיט 'פקודה עם'--כּוֹחַ'אפשרות.

עדכן סניף 'מאסטר'

בזמן שתיקנתי את הבאג בענף 'dev' שלי, אני יכול עכשיו למזג את השינוי הזה גם עם הענף 'master' -

  • לעבור ל'מאסטר ', פקודה:מאסטר לקופות
  • משוך עדכונים אחרונים מ'מוצא / מאסטר 'ל'מאסטר', פקודה:מקור למשוך
  • מיזוג 'dev' שינויים, פקודה:ענק מיזוג git

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

לסיכום, 'git bisect' הוא פקודה שימושית ושימושית במהירות לזהות ה התחייב מזהה זֶה הציג ל אשמה בקוד הריצה שלך בעזרת נרחב חיפוש בינארי על ידי לוגית מחלק יומני ההתחייבות באמצע הדרך בין טוֹב ו רַע לְבַצֵעַ טווח . לסיום למדת לזהות ההתחייבות הלקויה ו לַחֲזוֹר את השינוי שנעשה על ידי זה.

בנוסף, לתתי-הפקודות 'טוב' ו'רע 'תוכלו גם להשתמש במונחים כמו חדשים וישנים כדי לתאר את מצב התיקון. אתה יכול להריץ את הפקודה מספר פעמים על ידי העברת תתי פקודות שונות ומזהי תיקון / ביצוע כדי לזהות מזהי התחייבות שונים (she-1). לחלופין, ניתן גם להריץ סקריפט בדיקה אוטומטי לבניית הקוד השבור באמצעות פקודה זו. כמו כן, מצא תיאור מפורט של פקודה זו על ידי הפעלתgit bisect - עזרהבטרמינל. אז, אנשים עם זה אנחנו מגיעים לסוף מאמר זה על Git Bisect.

שיעור סורק בדוגמאות Java

הכוונה של DevOps היא ליצור תוכנה באיכות טובה יותר במהירות ובאמינות רבה יותר תוך הזמנת תקשורת ושיתוף פעולה רב יותר בין הצוותים. אם אתה מסוקרן ממאמר זה, ג לעזאזל עם מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס הכשרת ההסמכה של Edureka DevOps עוזר ללומדים להבין מה זה DevOps ולצבור מומחיות בתהליכים וכלים שונים של DevOps כגון Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack ו- GIT לאוטומציה של מספר שלבים ב- SDLC.

יש לך שאלה עבורנו? אנא הזכיר זאת במדור ההערות במאמר 'Git Bisect' ונחזור אליך בהקדם האפשרי.