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
: אפשר להמשיך בסנכרון של פרויקטים אחרים גם אם הסנכרון של פרויקט מסוים נכשל.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]
השוואה בין עץ העבודה לאזור ההכנה (האינדקס) ולשינויים האחרונים שהועברו להסתעפות הזו (HEAD) בכל פרויקט שצוין. הצגת שורת סיכום לכל קובץ שבו יש הבדל בין שלושת המצבים האלה.
כדי לראות את הסטטוס של ההסתעפות הנוכחית בלבד, מריצים את הפקודה repo status .
. סטטוס הבדיקה מופיע לפי פרויקט. לכל קובץ בפרויקט משויך קוד בן שתי אותיות.
בעמודה הראשונה, אות גדולה מציינת את ההבדל בין אזור העברה לבין המצב האחרון שהתחייבו אליו.
Letter | משמעות | תיאור |
---|---|---|
- | ללא שינוי | כך גם ב-HEAD ובאינדקס |
A | נוסף | לא ב-HEAD, באינדקס |
M | תאריך השינוי | ב-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
לא הופעל בתחילת הסשן. כדי לשחזר את השינויים, אפשר לבדוק את מזהה השמירה, ליצור הסתעפות חדשה ולאחר מכן למזג אותה.