תהליך עבודה של בקרת גרסאות

כדי לעבוד עם קוד Android, צריך להשתמש ב-Git (מערכת לבקרת גרסאות בקוד פתוח) וב-Repo (כלי ניהול מאגרים של Google שפועל על גבי Git). במאמר כלים לניהול גרסאות מוסבר על הקשר בין Repo ל-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.

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

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

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 לשמור את השינויים, צריך לסמן אותם או להעביר אותם לשלב כדי לכלול אותם ב-commit.

כדי להעביר שינויים לשלב:

git add

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

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

כדי להציג את הסטטוס של הקבצים:

repo status

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

repo diff

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

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

ביצוע השינויים

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

git commit

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

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

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

repo sync
repo upload

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

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

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

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

ניקוי לקוחות

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

repo sync
repo prune

מחיקת לקוחות

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

rm -rf WORKING_DIRECTORY

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