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