מסמך עזר של פקודת 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 של קוד המקור של המאגר קובצי מניפסט רגילים של 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 שווה ערך to:

    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

download

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