کار با کد اندروید نیازمند استفاده از 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
برای مشاهدهی فهرستی از تمام پروژهها، به مخازن گوگل گیت مراجعه کنید. اگر قبلاً به دایرکتوری پروژه رفتهاید، کافیست از یک نقطه برای نمایش پروژهی فعلی استفاده کنید.
برای رفتن به شاخه دیگری در محیط کار محلی خود:
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
حذف یک کلاینت، هرگونه تغییری را که برای بررسی آپلود نکردهاید، بهطور دائم حذف میکند.