כדי לעבוד עם קוד Android, צריך להשתמש ב-Git (מערכת לבקרת גרסאות בקוד פתוח) וב-Repo (כלי ניהול מאגרים של Google שפועל על גבי Git). במאמר כלים לניהול גרסאות מוסבר על הקשר בין Repo ל-Git, ומוצגים קישורים למסמכי עזרה לכל כלי.
קצב הזרימה
תהליך הפיתוח של Android כולל את תהליך העבודה הבסיסי הבא:
- מתחילים להשתמש בהסתעפות חדשה בנושא באמצעות
repo start
. - עורכים את הקבצים.
- מחלקים את השינויים לשלבים באמצעות
git add
. - שומרים את השינויים באמצעות
git commit
. - מעלים את השינויים לשרת הבדיקה באמצעות
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
מחזירה התנגשויות בסנכרון:
- הצגת הקבצים שלא אוחדו (קוד סטטוס = U).
- עורכים את אזורי העימות לפי הצורך.
- עוברים לספריית הפרויקט הרלוונטית. מוסיפים את הקבצים הרלוונטיים ומבצעים עליהם commit, ואז מבצעים rebase לשינויים:
git add .
git commit
git rebase --continue
- אחרי שהבסיס מעודכן, מתחילים שוב את כל תהליך הסנכרון:
repo sync PROJECT0 PROJECT1 ... PROJECTN
ניקוי לקוחות
אחרי שממזגים שינויים ב-Gerrit, מעדכנים את ספריית העבודה המקומית ואז משתמשים ב-repo prune
כדי להסיר בבטחה את ההסתעפויות הלא מעודכנות של הנושא:
repo sync
repo prune
מחיקת לקוחות
מאחר שכל פרטי המצב מאוחסנים בלקוח, צריך רק למחוק את הספרייה ממערכת הקבצים:
rm -rf WORKING_DIRECTORY
מחיקת לקוח תגרום למחיקה לצמיתות של כל השינויים שלא העליתם לבדיקה.