מסמך עזר של פקודת Repo

Repo משלים את Git על ידי הפשטת העבודה במספר מאגרים. עבור להסבר על הקשר בין Repo ל-Git, ראו כלים לבקרת מקורות. לקבלת מידע נוסף למידע נוסף על Repo, קובץ README

השימוש ב-Repo מתבצע באופן הבא:

repo command options

רכיבים אופציונליים מוצגים בסוגריים מרובעים []. לדוגמה, הרבה פקודות project-list כארגומנט. אפשר לציין project-list כרשימת שמות או רשימת נתיבים לספריות מקור מקומיות פרויקטים:

repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]

עזרה

repo help

הצגת עזרה לגבי הפקודה repo. אפשר לראות מידע מפורט על פקודת Repo ספציפית שמציינת פקודה כאפשרות:

repo help command

לדוגמה, הפקודה הבאה מניבה תיאור ורשימת אפשרויות לפקודה init:

repo help init

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

repo command --help

מוצרים לדוגמה:

repo init --help

init

repo init -u url [options]

התקנת Repo בספרייה הנוכחית. הפקודה הזו יוצרת .repo/ לספרייה עם מאגרי Git של קוד המקור של המאגר קובצי מניפסט רגילים של Android.

עכשיו אפשר:

  • -u: ציון כתובת ה-URL שממנה יאחזר מאגר מניפסטים. המניפסט נמצא ב-https://android.googlesource.com/platform/manifest.

  • -m: בוחרים קובץ מניפסט בתוך המאגר. אם אין שם מניפסט נבחר, ברירת המחדל היא default.xml.

  • -b: ציון גרסה קודמת, כלומר manifest-branch מסוים.

סנכרון

repo sync [project-list]

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

כשמריצים את הפקודה repo sync, זה מה שקורה:

  • אם הפרויקט מעולם לא סונכרן, אז repo sync שווה ערך ל- git clone; כל ההסתעפויות במאגר הנתונים המרוחק מועתקות של פרויקט.

  • אם הפרויקט כבר סונכרן בעבר, הערך של repo sync יהיה שווה ל-:

    git remote update
    git rebase origin/branch
    

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

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

אפשרויות מפתח:

  • -c: אחזור מהשרת רק את ההסתעפות הנוכחית של המניפסט.
  • -d: החזרת הפרויקטים שצוינו חזרה לגרסת המניפסט. האפשרות הזו שימושית אם הפרויקט נמצא בהסתעפות של נושא, אבל יש צורך באופן זמני בגרסה של המניפסט.
  • -f: ממשיכים בסנכרון של פרויקטים אחרים גם אם הפרויקט לא מסתנכרן.
  • threadcount: פיצול הסנכרון בין שרשורים להשלמת התהליך מהר יותר. חשוב לוודא שלא מעמיסים יותר מדי על המכונה – כדאי להשאיר חלק מהמעבד פנוי למשימות אחרות. כדי לראות את מספר מעבדי ה-CPU הזמינים, מריצים קודם את הפקודה nproc --all.
  • -q: הפעלה שקטה על ידי הסתרת הודעות הסטטוס.
  • -s: סנכרון עם build תקין ידוע, כפי שמצוין ברכיב manifest-server במניפסט הנוכחי.

להצגת אפשרויות נוספות, מריצים את repo help sync.

העלה

repo upload [project-list]

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

לאחר מכן, כל השמירות (commits) בהסתעפויות שנבחרו מועברות ל-Gerrit דרך חיבור HTTPS. כדי לאפשר העלאה צריך להגדיר סיסמת HTTPS אישור. כדי ליצור שם משתמש/סיסמה חדשים לשימוש ב-HTTPS, אפשר להיכנס אל הכלי ליצירת סיסמאות.

כשמערכת Gerrit מקבלת את נתוני האובייקט דרך השרת שלה, היא הופכת כל הטמעה לשינוי כדי שבודקים יוכלו להגיב על הטמעה ספציפית. כדי לשלב כמה השמירות בנקודות עצירה לתוך השמירה אחת, משתמשים ב-git rebase -i לפני שמריצים את ההעלאה.

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

כדי לערוך שינויים אחרי שהם הועלו, משתמשים בכלי כמו git rebase -i או git commit --amend כדי לעדכן את ההתחייבויות המקומיות. אחרי שהעריכות הושלם:

  • מוודאים שההסתעפות המעודכנת היא ההסתעפות הנוכחית שנשלחה.
  • מקישים על repo upload --replace PROJECT כדי לפתוח את עורך ההתאמה לשינויים.
  • לכל שמירה בסדרה, מזינים את מזהה השינוי של Gerrit בתוך הסוגריים:

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific...
    [ 2829 ] ec18b4ba Update proto client to support patch set replacements
    # Insert change numbers in the brackets to add a new patch set.
    # To create a new change record, leave the brackets empty.
    

אחרי שההעלאה תסתיים, לשינויים יהיו תיקון נוסף.

אם רוצים להעלות רק את ההסתעפות הנוכחית ב-Git, משתמשים בדגל --current-branch (או --cbr בקיצור).

הבדל

repo diff [project-list]

הצגת השינויים שעדיין לא בוצעו בין ההתחייבות לעץ העבודה באמצעות git diff

הורדה

repo download target change

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

לדוגמה, כדי להוריד את הקובץ change 23823 לספרייה platform/build:

repo download platform/build 23823

הפעלת repo sync מסירה את כל ההצהרות שהתקבלו באמצעות repo download. לחלופין, אפשר להשתמש בפקודה git checkout m/main כדי לבדוק את ההסתעפות מרחוק.

Forall

repo forall [project-list] -c command

מפעיל את פקודת המעטפת הנתונה בכל פרויקט. משתני הסביבה הנוספים הבאים זמינים ב-repo forall:

  • REPO_PROJECT מוגדר לשם הייחודי של הפרויקט.
  • REPO_PATH הוא הנתיב ביחס לשורש של הלקוח.
  • REPO_REMOTE הוא השם של המערכת המרוחקת מהמניפסט.
  • REPO_LREV הוא שם הגרסה מהמניפסט, שמתורגם ל הסתעפות מעקב מקומי. משתמשים במשתנה הזה אם צריך להעביר את הגרסה של המניפסט לפקודת Git שמופעל באופן מקומי.
  • REPO_RREV הוא שם הגרסה הקודמת מתוך המניפסט, בדיוק כפי שנכתב במניפסט.

עכשיו אפשר:

  • -c: הפקודה והארגומנטים לביצוע. בדיקת הפקודה מתבצעת באמצעות /bin/sh וכל ארגומנטים לאחר העברתם כמיקום של מעטפת .
  • -p: הצגת כותרות הפרויקט לפני הפלט של הפקודה שצוינה. כדי לעשות זאת, מקשרים צינורות לזרמים stdin,‏ stdout ו-sterr של הפקודה, ומעבירים את כל הפלט לצינור רצוף שמוצג בסשן אחד של חלון קריאה.
  • -v: הצגת הודעות שהפקודה כותבת ל-stderr.

שזיף

repo prune [project-list]

מחיקת נושאים שכבר מוזגו.

התחל

repo start branch-name [project-list]

מתחיל הסתעפות חדשה לפיתוח, החל מהגרסה הקודמת שצוינה .

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

הארגומנט project-list מציין אילו פרויקטים משתתפים בהסתעפות הזו של הנושא.

status

repo status [project-list]

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

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

בעמודה הראשונה, אות גדולה מציינת את ההבדל בין אזור העברה לבין המצב האחרון שהתחייבו אליו.

Letter משמעות תיאור
- ללא שינוי זהים ב-HEAD ובאינדקס
A נוסף לא ב-HEAD, באינדקס
ב' תאריך השינוי ב-HEAD, שונה באינדקס
D פריטים שנמחקו ב-HEAD, לא נוסף לאינדקס
R השם השתנה לא נמצא ב-HEAD, הנתיב השתנה באינדקס
C הטקסט הועתק לא ב-HEAD, הועתקה ממקור אחר באינדקס
T המצב השתנה תוכן זהה ב-HEAD ובאינדקס, המצב השתנה
U בוטל המיזוג יש התנגשות בין HEAD לבין האינדקס. צריך לפתור את הבעיה

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

Letter משמעות תיאור
- חדש/לא ידוע לא באינדקס, בעץ העבודה
m תאריך השינוי באינדקס, בעץ העבודה, שונה
d פריטים שנמחקו נמצאים באינדקס, ולא בעץ העבודה

טיפול בשגיאות במאגר

git commit -a # Commit local changes first so they aren't lost.
repo start branch-name # Start the branch
git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start
repo upload .

השגיאה repo: error: no branches ready for upload מופיעה כשהפקודה repo start לא הופעל בתחילת הסשן. כדי לשחזר את השינויים, אפשר לבדוק את מזהה השמירה, ליצור הסתעפות חדשה ולאחר מכן למזג אותה.