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