Repo משלים את Git על ידי הפשטת העבודה במספר מאגרים. הסבר על הקשר בין Repo ל-Git זמין במאמר כלים לבקרת גרסאות. למידע נוסף על Repo, אפשר לעיין בקובץ README של Repo.
השימוש ב-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
בקיצור).
אם מדובר בשינויים קשורים, מומלץ לשמור את כל בקשות העריכה באותו נושא. אפשר להוסיף שם לנושא בזמן ההעלאה באמצעות --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
הפקודה הזו מפעילה את פקודת המעטפת שצוינה בכל פרויקט. משתני הסביבה הנוספים הבאים זמינים ב-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
לא הופעל בתחילת הסשן. כדי לשחזר את השינויים, אפשר לבדוק את מזהה השמירה, ליצור הסתעפות חדשה ולאחר מכן למזג אותה.