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