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