گردش کار کنترل منبع

کار با کد اندروید نیازمند استفاده از Git (یک سیستم کنترل نسخه منبع باز) و Repo (ابزار مدیریت مخزن ساخته شده توسط گوگل است که در بالای Git اجرا می شود). برای توضیح رابطه بین Repo و Git و پیوندهایی به اسناد پشتیبانی برای هر ابزار، به ابزار کنترل منبع مراجعه کنید.

جریان

توسعه اندروید شامل گردش کار اساسی زیر است:

  1. با استفاده از repo start یک شاخه موضوع جدید راه اندازی کنید.
  2. فایل ها را ویرایش کنید.
  3. تغییرات مرحله با استفاده از git add .
  4. تغییرات را با استفاده از git commit انجام دهید.
  5. با استفاده از 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 تداخل های همگام سازی را برمی گرداند:

  1. مشاهده فایل هایی که ادغام نشده اند (کد وضعیت = U).
  2. مناطق درگیری را در صورت لزوم ویرایش کنید.
  3. به دایرکتوری پروژه مربوطه تغییر دهید. فایل‌های آسیب‌دیده را اضافه و commit کنید، سپس تغییرات را تغییر دهید:
    git add .
    git commit
    git rebase --continue
    
  4. پس از تکمیل تغییر، کل همگام‌سازی را دوباره شروع کنید:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

تمیز کردن مشتریان

پس از ادغام تغییرات در Gerrit، فهرست کاری محلی خود را به روز کنید، سپس از repo prune برای حذف ایمن شاخه های موضوع قدیمی استفاده کنید:

repo sync
repo prune

حذف مشتریان

از آنجا که تمام اطلاعات وضعیت در کلاینت شما ذخیره می شود، فقط باید دایرکتوری را از سیستم فایل خود حذف کنید:

rm -rf WORKING_DIRECTORY

حذف دائمی یک مشتری، تغییراتی را که برای بررسی آپلود نکرده‌اید، حذف می‌کند .