תהליך עבודה של בקרת מקור

כדי לעבוד עם קוד Android צריך להשתמש ב-Git (קובץ קוד פתוח) ניהול גרסאות) ו-Repo (מאגר שנוצר על ידי Google) בכלי הניהול שפועל מעל Git). למידע נוסף, ראו כלים לבקרת מקורות להסבר על הקשר בין מאגר ו-Git וקישורים למסמכי תיעוד לכל כלי.

קצב הזרימה

תהליך הפיתוח של Android כולל את תהליכי העבודה הבסיסיים הבאים:

  1. התחלת הסתעפות חדשה לנושא באמצעות repo start.
  2. עורכים את הקבצים.
  3. שינויי שלבים באמצעות git add.
  4. שמירת השינויים באמצעות git commit.
  5. העלאת השינויים לשרת הביקורות באמצעות repo upload.

Tasks

העבודה עם Git ו-Repo במאגרי הקוד של Android כוללת לבצע את המשימות הנפוצות הבאות.

הוראה תיאור
repo init הפעלת לקוח חדש.
repo sync מסנכרנת את הלקוח למאגרים.
repo start התחלת הסתעפות חדשה.
repo status הצגת הסטטוס של ההסתעפות הנוכחית.
repo upload המערכת מעלה שינויים לשרת הביקורות.
git add מעבר בין הקבצים.
git commit שמירת הקבצים שנמצאים במחסן ביניים
git branch הצגת ההסתעפויות הנוכחיות.
git branch [branch] יצירת הסתעפות חדשה לנושא.
git checkout [branch] העברה של HEAD להסתעפות שצוינה.
git merge [branch] יתבצע מיזוג של [branch] להסתעפות הנוכחית.
git diff הצגת ההבדל בין השינויים שלא הושלמו.
git diff --cached מציג את ההבדלים בין השינויים המדורגים.
git log הצגת ההיסטוריה של ההסתעפות הנוכחית.
git log m/[codeline].. הצגת ההתחייבויות שלא הועברו.

למידע נוסף על השימוש במאגר כדי להוריד את המקור: הורדת המקור חומר עזר בנושא פקודות Repo.

סנכרון לקוחות

כדי לסנכרן את הקבצים עבור כל הפרויקטים הזמינים:

repo sync

כדי לסנכרן את הקבצים של פרויקטים נבחרים:

repo sync PROJECT0 PROJECT1 ... PROJECTN

יצירת הסתעפויות נושאים

להתחיל הסתעפות לנושא בסביבת העבודה המקומית בכל פעם שמתחילים למשל, כשמתחילים לעבוד על באג או על תכונה חדשה. הסתעפות של נושא לא עותק של הקבצים המקוריים. הוא מצביע התחייבות מסוימת, שהופכת ליצור סניפים מקומיים ולעבור בין לבצע להם פעולה פשוטה. באמצעות הסתעפויות, אפשר לבודד היבט אחד של את העבודה שלכם מאחרים. למאמר מעניין על השימוש בנושא ענפים, הפרדת להסתעפויות נושא.

כדי להתחיל הסתעפות נושא באמצעות Repo, עוברים לפרויקט ומריצים את הפקודה:

repo start BRANCH_NAME .

התקופה האחרונה ( .) מייצגת את הפרויקט בתהליך העבודה הנוכחי

כדי לוודא שההסתעפות החדשה נוצרה:

repo status .

שימוש בהסתעפויות נושאים

כדי להקצות את ההסתעפות לפרויקט ספציפי:

repo start BRANCH_NAME PROJECT_NAME

לרשימה של כל הפרויקטים: android.googlesource.com. אם כבר ניווטתם לספריית הפרויקטים, השתמשו בנקודה כדי שמייצגים את הפרויקט הנוכחי.

כדי לעבור להסתעפות אחרת בסביבת העבודה המקומית:

git checkout BRANCH_NAME

כדי להציג רשימה של הסתעפויות קיימות:

git branch

או

repo branches

שתי הפקודות מחזירות את רשימת ההסתעפויות הקיימות עם שם ההסתעפות הנוכחית שלפניה מופיעה כוכבית (*).

קבצים ב-Staging

כברירת מחדל, Git מזהה שינויים שאתם מבצעים בפרויקט, אבל לא עוקבים אחרי השינויים. כדי להורות ל-Git לשמור את השינויים, צריך לסמן או שלב אותם אילו שינויים צריך לכלול בשמירה.

כדי לבצע שינויים בשלב:

git add

הפקודה הזו מקבלת ארגומנטים לקבצים או לספריות בפרויקט למרות השם, git add לא רק מוסיף קבצים אל מאגר Git; אפשר גם להשתמש בו כדי לבצע שינויים בקבצים מחיקות.

הצגת הסטטוס של הלקוח

כדי להציג רשימה של מצבי הקבצים:

repo status

כדי לצפות בעריכות ללא התחייבות (עריכות מקומיות שלא מסומנות לצורך שמירה):

repo diff

כדי להציג עריכות שבוצעו (עריכות נמצאות שמסומנות שמירה), צריך לוודא שנמצאים בספריית הפרויקט ואז להריץ את git diff עם הארגומנט cached:

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

מתבצע שינויים

מחויבות היא היחידה הבסיסית של בקרת גרסאות ב-Git, והיא מורכבת תמונת מצב של מבנה הספרייה ותוכן הקובץ עבור הפרויקט כולו. משתמשים בפקודה הזו כדי ליצור התחייבות ב-Git:

git commit

כשתתבקשו לשמור הודעת אישור, ציינו הודעה קצרה (אבל מועילה) שינויים שנשלחו ל-AOSP. אם לא תוסיפו הודעת שמירה, ההתחייבות תיכשל.

העלאת שינויים ל-Gerrit

יש לעדכן לגרסה האחרונה ולאחר מכן להעלות את השינוי:

repo sync
repo upload

הפקודות האלה מחזירות רשימה של השינויים שביצעתם ומנחות אתכם בוחרים את ההסתעפויות שרוצים להעלות לשרת הביקורות. אם יש רק אחד הסתעפות, תופיע הנחיה פשוטה של y/n.

פתרון התנגשויות סנכרון

אם הפקודה repo sync מחזירה התנגשויות בסנכרון:

  1. הצגת הקבצים שלא מוזגו (קוד סטטוס = U).
  2. עורכים את האזורים המתנגשים לפי הצורך.
  3. משנים את ספריית הפרויקט הרלוונטית. מוסיפים ושומרים את השינויים המושפעים לאחר מכן, בסס מחדש את השינויים:
    git add .
    git commit
    git rebase --continue
    
  4. בסיום ה-rebase, מתחילים שוב את הסנכרון כולו:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

הסרת לקוחות

אחרי שמוזגו את השינויים ב-Gerrit, מעדכנים את ספריית העבודה המקומית, ואז משתמשים repo prune כדי להסיר הסתעפויות נושאים לא פעילות:

repo sync
repo prune

מחיקת לקוחות

מאחר שכל המידע במצב מאוחסן בלקוח שלך, עליך רק מוחקים את הספרייה ממערכת הקבצים:

rm -rf WORKING_DIRECTORY

מחיקת לקוח מוחקת באופן סופי שינויים שעדיין לא בוצעו שהועלו לבדיקה.