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 לקוד המקור של 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
: להמשיך בסנכרון של פרויקטים אחרים גם אם הסנכרון של פרויקט מסוים נכשל.-
-j threadcount
: פיצול הסנכרון בין השרשורים כדי להשלים אותו מהר יותר. חשוב לוודא שלא מעמיסים על המחשב יותר מדי – צריך להשאיר חלק מה-CPU שמור למשימות אחרות. כדי לראות את מספר המעבדים הזמינים, קודם מריצים את הפקודהnproc --all
. -
-q
: הפעלה שקטה על ידי הסתרת הודעות סטטוס. -
-s
: מסנכרן עם build תקין מוכר, כפי שמצוין ברכיבmanifest-server
במניפסט הנוכחי.
כדי לראות אפשרויות נוספות, מריצים את הפקודה repo help sync
.
העלה
repo upload [project-list]
העלאת השינויים לשרת הבדיקה. בפרויקטים שצוינו, Repo משווה בין הענפים המקומיים לבין הענפים המרוחקים שעודכנו במהלך הסנכרון האחרון של 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
).
במקרה של שינויים קשורים, כדאי לשמור את כל רשימות השינויים באותו נושא. אפשר להוסיף שם לנושא בזמן ההעלאה באמצעות --topic=TOPIC
. אפשר גם להעביר רק -t
כדי להגדיר את שם הנושא זהה לשם הסניף המקומי.
diff
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
מריץ את פקודת ה-Shell שצוינה בכל פרויקט. משתני הסביבה הנוספים הבאים זמינים דרך repo forall
:
-
REPO_PROJECT
מוגדר לשם הייחודי של הפרויקט. -
REPO_PATH
הוא הנתיב ביחס לתיקיית הבסיס של הלקוח. -
REPO_REMOTE
הוא השם של המערכת המרוחקת מהמניפסט. -
REPO_LREV
הוא שם הגרסה מהמניפסט, שתורגם לענף מעקב מקומי. משתמשים במשתנה הזה אם צריך להעביר את המניפסט לפקודת Git שמופעלת באופן מקומי. -
REPO_RREV
הוא שם הגרסה מהמניפסט, בדיוק כמו שהוא מופיע במניפסט.
עכשיו אפשר:
-
-c
: פקודה וארגומנטים להפעלה. הפקודה מוערכת באמצעות/bin/sh
וכל הארגומנטים שאחריה מועברים כפרמטרים תלויי מיקום של מעטפת. -
-p
: הצגת כותרות הפרויקט לפני הפלט של הפקודה שצוינה. הפעולה הזו מתבצעת על ידי קישור צינורות לזרמי stdin, stdout ו-sterr של הפקודה, והעברת כל הפלט לזרם רציף שמוצג בסשן יחיד של pager. -
-v
: הצגת ההודעות שהפקודה כותבת ל-stderr.
שזיף
repo prune [project-list]
מחיקה של נושאים שכבר מוזגו.
התחל
repo start branch-name [project-list]
מתחיל ענף חדש לפיתוח, החל מהגרסה שצוינה במניפסט.
הארגומנט BRANCH_NAME
מספק תיאור קצר של השינוי שאתם מנסים לבצע בפרויקטים. אם אתם לא יודעים, כדאי להשתמש בשם default
.
הארגומנט project-list
מציין אילו פרויקטים משתתפים בענף הנושא הזה.
status
repo status [project-list]
הפקודה משווה בין עץ העבודה לבין אזור ההכנה (אינדקס) וההתחייבות האחרונה בענף הזה (HEAD) בכל פרויקט שצוין. מוצגת שורת סיכום לכל קובץ שבו יש הבדל בין שלושת המצבים האלה.
כדי לראות את הסטטוס של הענף הנוכחי בלבד, מריצים את הפקודה repo status .
. פרטי הסטטוס מפורטים לפי פרויקט. לכל קובץ בפרויקט יש קוד בן שתי אותיות.
בעמודה הראשונה, אות גדולה מציינת את ההבדל בין אזור ההמתנה לבין המצב האחרון שבוצעו בו שינויים.
מכתב | משמעות | תיאור |
---|---|---|
- | ללא שינוי | אותו דבר ב-HEAD ובאינדקס |
A | נוסף | לא ב-HEAD, נמצא באינדקס |
M | תאריך השינוי | ב-HEAD, שונה באינדקס |
D | נמחקה | ב-HEAD, לא באינדקס |
R | שינוי שם | Not in HEAD, path changed in index |
C | הועתק | לא ב-HEAD, הועתק מפריט אחר באינדקס |
T | המצב השתנה | אותו תוכן בתג HEAD ובאינדקס, המצב השתנה |
U | לא ממוזג | יש התנגשות בין HEAD לבין index; נדרש פתרון |
בעמודה השנייה, אות קטנה מציינת את ההבדל בין ספריית העבודה לבין האינדקס.
מכתב | משמעות | תיאור |
---|---|---|
- | חדש/לא ידוע | לא באינדקס, בעץ העבודה |
מטר | תאריך השינוי | באינדקס, בעץ העבודה, שונה |
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
לא הופעלה בתחילת הסשן. כדי לשחזר, אפשר לבדוק את מזהה השמירה, להתחיל ענף חדש ואז למזג אותו.