کار با کد اندروید به Git ، یک سیستم کنترل نسخه متنباز، و Repo ، یک ابزار مدیریت مخزن ساخته شده توسط گوگل که بر روی Git اجرا میشود، نیاز دارد. برای توضیح رابطه بین Repo و Git و پیوند به اسناد پشتیبانی برای هر ابزار، به ابزارهای کنترل منبع مراجعه کنید.
جریان
توسعه اندروید شامل گردش کار اساسی زیر است:
- با استفاده از
repo startیک شاخه موضوعی جدید شروع کنید. - فایلها را ویرایش کنید.
- تغییر مرحله با استفاده از
git add. - تغییرات را با استفاده از
git commitثبت کنید. - با استفاده از
repo uploadتغییرات را به سرور بررسی آپلود کنید.
وظایف
کار با Git و Repo در مخازن کد اندروید شامل انجام وظایف رایج زیر است.
| فرماندهی | توضیحات |
|---|---|
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
هر دو دستور لیستی از شاخههای موجود را به همراه نام شاخه فعلی که قبل از آن علامت ستاره (*) قرار دارد، برمیگردانند.
فایلهای مرحلهبندی
به طور پیشفرض، گیت متوجه تغییراتی که در یک پروژه ایجاد میکنید میشود اما آنها را ردیابی نمیکند. برای اینکه به گیت بگویید تغییرات شما را حفظ کند، باید آن تغییرات را برای گنجاندن در یک کامیت علامتگذاری یا مرحلهبندی کنید .
برای مرحله بندی تغییرات:
git add
این دستور آرگومانهایی برای فایلها یا دایرکتوریهای درون دایرکتوری پروژه میپذیرد. برخلاف نامش، git add فقط فایلها را به مخزن گیت اضافه نمیکند؛ بلکه میتواند برای مرحلهبندی تغییرات و حذف فایلها نیز استفاده شود.
مشاهده وضعیت کلاینت
برای فهرست کردن وضعیت فایلها:
repo status
برای مشاهده ویرایشهای تایید نشده (ویرایشهای محلی که برای تایید علامتگذاری نشدهاند ):
repo diff
برای مشاهده ویرایشهای کامیتشده (ویرایشهای مشخصشدهای که برای کامیت علامتگذاری شدهاند )، مطمئن شوید که در دایرکتوری پروژه هستید، سپس git diff با آرگومان cached اجرا کنید:
cd ~/WORKING_DIRECTORY/PROJECTgit diff --cached
اعمال تغییرات
یک کامیت واحد اساسی کنترل ویرایش در گیت است و شامل یک تصویر لحظهای از ساختار دایرکتوری و محتوای فایل برای کل پروژه است. از این دستور برای ایجاد یک کامیت در گیت استفاده کنید:
git commit
وقتی از شما پیام کامیت خواسته شد، یک پیام کوتاه (اما مفید) برای تغییرات ارسال شده به AOSP ارائه دهید. اگر پیام کامیت اضافه نکنید، کامیت با شکست مواجه میشود.
آپلود تغییرات در Gerrit
به آخرین نسخه بهروزرسانی کنید، سپس تغییر را آپلود کنید:
repo syncrepo upload
این دستورات لیستی از تغییراتی که شما اعمال کردهاید را برمیگردانند و از شما میخواهند شاخههایی را که میخواهید در سرور بررسی آپلود کنید، انتخاب کنید. اگر فقط یک شاخه وجود داشته باشد، یک علامت y/n ساده خواهید دید.
حل تداخلهای همگامسازی
اگر دستور repo sync تداخلات همگامسازی را برمیگرداند:
- فایلهایی که ادغام نشدهاند (کد وضعیت = U) را مشاهده کنید.
- در صورت لزوم، مناطق درگیری را ویرایش کنید.
- به دایرکتوری پروژه مربوطه بروید. فایلهای آسیبدیده را اضافه و کامیت کنید، سپس تغییرات را ریبیس کنید:
git add .git commitgit rebase --continue - پس از اتمام عملیات Rebase، کل فرآیند همگامسازی را دوباره شروع کنید:
repo sync PROJECT0 PROJECT1 ... PROJECTN
پاکسازی مشتریان
پس از ادغام تغییرات در Gerrit، دایرکتوری کاری محلی خود را بهروزرسانی کنید، سپس repo prune برای حذف ایمن شاخههای موضوعی قدیمی استفاده کنید:
repo syncrepo prune
حذف کلاینتها
از آنجا که تمام اطلاعات وضعیت در کلاینت شما ذخیره میشود، فقط باید دایرکتوری را از سیستم فایل خود حذف کنید:
rm -rf WORKING_DIRECTORY
حذف یک کلاینت، هرگونه تغییری را که برای بررسی آپلود نکردهاید، بهطور دائم حذف میکند .