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

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

השימוש במאגר מתבצע באופן הבא:

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

להתחיל

repo init -u url [options]

התקנת המאגר בספרייה הנוכחית. הפקודה הזו יוצרת ספריית .repo/ עם מאגרי Git לקוד המקור של ה-Repo ולקובצי המניפסט הרגילים של 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) שמור למשימות אחרות. כדי לראות את מספר המעבדים (CPU) הזמינים, מריצים קודם את nproc --all.
  • -q: הפעלה שקטה על ידי הסתרת הודעות הסטטוס.
  • -s: סנכרון ל-build טוב שמוכר כפי שצוין ברכיב manifest-server במניפסט הנוכחי.

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

העלה

repo upload [project-list]

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

לאחר מכן, כל ההתחייבויות להסתעפויות שנבחרו מועברות ל-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

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

לדוגמה, כדי להוריד את שינוי 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 הוא הנתיב היחסי לרמה הבסיסית (root) של הלקוח.
  • 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 .. הסטטוס מפורט לפי פרויקט. לכל קובץ בפרויקט משתמשים בקוד בן שתי אותיות.

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

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

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

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 לא פעלה בתחילת הסשן. כדי לשחזר, תוכלו לבדוק את מזהה ההתחייבות, להתחיל הסתעפות חדשה ואז למזג אותו.