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

کار با کد اندروید به 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 فایل‌های مرحله‌بندی‌شده را کامیت می‌کند.
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/PROJECT
git diff --cached

اعمال تغییرات

یک کامیت واحد اساسی کنترل ویرایش در گیت است و شامل یک تصویر لحظه‌ای از ساختار دایرکتوری و محتوای فایل برای کل پروژه است. از این دستور برای ایجاد یک کامیت در گیت استفاده کنید:

git commit

وقتی از شما پیام کامیت خواسته شد، یک پیام کوتاه (اما مفید) برای تغییرات ارسال شده به AOSP ارائه دهید. اگر پیام کامیت اضافه نکنید، کامیت با شکست مواجه می‌شود.

آپلود تغییرات در Gerrit

به آخرین نسخه به‌روزرسانی کنید، سپس تغییر را آپلود کنید:

repo sync
repo upload

این دستورات لیستی از تغییراتی که شما اعمال کرده‌اید را برمی‌گردانند و از شما می‌خواهند شاخه‌هایی را که می‌خواهید در سرور بررسی آپلود کنید، انتخاب کنید. اگر فقط یک شاخه وجود داشته باشد، یک علامت y/n ساده خواهید دید.

حل تداخل‌های همگام‌سازی

اگر دستور repo sync تداخلات همگام‌سازی را برمی‌گرداند:

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

پاکسازی مشتریان

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

repo sync
repo prune

حذف کلاینت‌ها

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

rm -rf WORKING_DIRECTORY

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