مرجع أمر Repo

يُكمّل Repo Git من خلال تبسيط العمل عبر مستودعات متعددة. للحصول على شرح للعلاقة بين Repo وGit، يُرجى الاطّلاع على أدوات التحكّم في المصدر. لمزيد من التفاصيل حول Repo، يُرجى الاطّلاع على ملف README الخاص بـ Repo.

يتم استخدام المستودعات بالشكل التالي:

repo command options

يتم عرض العناصر الاختيارية بين قوسين []. على سبيل المثال، تأخذ العديد من الأوامر project-list كمَعلمة. يمكنك تحديد project-list كقائمة أسماء أو قائمة مسارات إلى أدلة المصدر المحلية لمشاريع:

repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]

مساعدة

repo help

يوفّر مساعدة حول الأمر repo. يمكنك الاطّلاع على معلومات تفصيلية عن أحد ملفّات Repo التي تحدّد أمرًا كخيار:

repo help command

على سبيل المثال، يقدّم الأمر التالي وصفًا وقائمة خيارات للأمر init:

repo help init

أو للاطّلاع فقط على قائمة الخيارات المتاحة لأحد الأوامر، شغِّل:

repo command --help

مثلاً:

repo init --help

init

repo init -u url [options]

يؤدي هذا الإجراء إلى تثبيت Repo في الدليل الحالي. ينشئ هذا الأمر .repo/ دليلاً يتضمّن مستودعات Git لرمز المصدر في Repo وملفَّي بيان Android العاديَين.

الخيارات:

  • -u: حدِّد عنوان URL لاسترداد مستودع بيان. يمكن العثور على ملف البيان المشترَك على https://android.googlesource.com/platform/manifest.

  • -m: اختَر ملف بيان داخل المستودع. إذا لم يتم تحديد اسم بيان، يكون العنوان التلقائي هو default.xml.

  • -b: حدِّد نسخة سابقة، أي manifest-branch معيّنة.

مزامنة

repo sync [project-list]

تنزيل التغييرات الجديدة وتعديل الملفات النشطة في بيئتك المحلية، ما يؤدي إلى تنفيذ git fetch بشكل أساسي في جميع مستودعات Git في حال تنفيذ repo sync بدون وسيطات، ستتم مزامنة الملفات لجميع المشاريع.

عند تشغيل repo sync، سيحدث ما يلي:

  • إذا لم تتم مزامنة المشروع مطلقًا، يكون repo sync مساويًا ل git clone، ويتم نسخ جميع الفروع في المستودع البعيد إلى دليل المشروع المحلي.

  • إذا تمت مزامنة المشروع من قبل، تكون قيمة repo sync مكافئة لما يلي:

    git remote update
    git rebase origin/branch
    

    حيث branch هو الفرع الحالي الذي يتم تسجيل المغادرة في دليل المشروع المحلي. إذا لم يكن الفرع المحلي يتتبّع فرعًا في المستودع العميق، لن تتم مزامنة المشروع.

بعد تنفيذ repo sync بنجاح، يتم تعديل الرمز البرمجي في المشاريع المحدّدة ومزامنته مع الرمز البرمجي في المستودع البعيد.

الخيارات الرئيسية:

  • -c: لا يتم جلب سوى فرع البيان الحالي من الخادم.
  • -d: يمكنك تبديل المشاريع المحدّدة مرة أخرى إلى نسخة البيان. يكون هذا الخيار مفعّلاً إذا كان المشروع في فرع موضوع، ولكن تكون مراجعة البيان ضرورية مؤقتًا.
  • -f: يمكنك مواصلة مزامنة المشاريع الأخرى حتى إذا تعذّر مزامنة أحد المشاريع.
  • threadcount: يمكنك تقسيم المزامنة على مستوى سلاسل المحادثات لإكمالها بشكل أسرع. احرص على عدم تحميل جهازك بشكل زائد، واترك بعض وحدة المعالجة المركزية محجوزة للمهام الأخرى. للاطّلاع على عدد وحدات المعالجة المركزية المتاحة، عليك أولاً تشغيل nproc --all.
  • -q: التشغيل بدون إزعاج من خلال حظر رسائل الحالة
  • -s: المزامنة مع إصدار معروف وصالح كما هو محدّد في عنصر manifest-server في ملف البيان الحالي

لمزيد من الخيارات، يمكنك تشغيل "repo help sync".

تحميل

repo upload [project-list]

تحميل التغييرات إلى خادم المراجعة بالنسبة للمشروعات المحددة، يقارن Repo الفروع المحلية بالفروع البعيدة التي تم تحديثها أثناء آخر مزامنة Repo. يطلب منك Repo اختيار فرع واحد أو أكثر لم يتم تحميله للمراجعة.

يتم بعد ذلك نقل كل الفروع المحدّدة إلى Gerrit عبر اتصال HTTPS. عليك ضبط كلمة مرور HTTPS لتفعيل إذن التحميل. لإنشاء زوج جديد من اسم مستخدم/كلمة مرور لاستخدامه من خلال HTTPS، انتقِل إلى أداة إنشاء كلمات المرور.

عندما يتلقّى Gerrit بيانات العنصر عبر خادمه، يحوّل كل commit إلى تغيير حتى يتمكّن المراجعون من التعليق على commit معيّن. لدمج عدة عمليات إرسال نقاط تفتيش في عملية إرسال واحدة، استخدِم git rebase -i قبل تشغيل عملية التحميل.

إذا شغّلت repo upload بدون وسيطات، سيتم البحث في جميع المشاريع عن تغييرات لتحميلها.

لتعديل التغييرات بعد تحميلها، استخدِم أداة مثل git rebase -i أو git commit --amend لتعديل عمليات الربط المحلية. بعد اكتمال تعديلاتك:

  • تأكَّد من أنّ الفرع الذي تم تعديله هو الفرع الذي تم تسجيله حاليًا.
  • استخدِم repo upload --replace PROJECT لفتح محرِّر مطابقة التغييرات.
  • لكلّ عملية إرسال في السلسلة، أدخِل معرّف تغيير Gerrit داخل الأقواس:

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific...
    [ 2829 ] ec18b4ba Update proto client to support patch set replacements
    # Insert change numbers in the brackets to add a new patch set.
    # To create a new change record, leave the brackets empty.
    

بعد اكتمال عملية التحميل، يتم إضافة مجموعة تصحيحات إضافية إلى التغييرات.

إذا كنت تريد تحميل فرع Git الذي تم تسجيله حاليًا فقط، استخدِم العلامة --current-branch (أو --cbr اختصارًا).

diff

repo diff [project-list]

تعرِض التغييرات غير المُطبَّقة بين الإضافة والشجرة العاملة باستخدام git diff.

تنزيل

repo download target change

تنزيل التغيير المحدّد من نظام المراجعة وإتاحته في دليل العمل المحلي لمشروعك

على سبيل المثال، لتنزيل change 23823 إلى الدليل platform/build:

repo download platform/build 23823

يؤدي تشغيل repo sync إلى إزالة أيّ عمليات إرسال تم استرجاعها باستخدام repo download. أو يمكنك الاطّلاع على الفرع البعيد باستخدام git checkout m/main.

forall

repo forall [project-list] -c command

تُنفِّذ الأمر المُعطى في بيئة سطر الأوامر في كل مشروع. تتوفّر repo forall بالمتغيّرات التالية الإضافية للبيئة:

  • يتم ضبط REPO_PROJECT على الاسم الفريد للمشروع.
  • REPO_PATH هو المسار بالنسبة إلى جذر العميل.
  • REPO_REMOTE هو اسم النظام البعيد الوارد في ملف البيان.
  • REPO_LREV هو اسم المراجعة من البيان، وتم تحويله إلى فرع تتبُّع محلي. استخدم هذا المتغير إذا كنت بحاجة إلى تمرير مراجعة البيان إلى أمر Git يتم تنفيذه محليًا.
  • REPO_RREV هو اسم المراجعة من البيان، كما هو مكتوب بالضبط في البيان.

الخيارات:

  • -c: الأمر والوسيطات المراد تنفيذها. يتم تقييم الأمر من خلال /bin/sh ويتم تمرير أي وسيطات بعده كمَعلمات موضعية لshell.
  • -p: عرض رؤوس المشاريع قبل إخراج الأمر المحدّد ويتم تحقيق ذلك من خلال ربط الممرات بتدفقات الأمر stdin وstdout وsterr، ثم توجيه جميع المخرجات إلى تدفق متواصل يتم عرضه في جلسة واحدة.
  • -v: عرض الرسائل التي يكتبها الأمر إلى الجهاز العادي

الخوخ المجفف

repo prune [project-list]

يؤدي هذا الإجراء إلى حذف المواضيع التي سبق أن تم دمجها.

بدء

repo start branch-name [project-list]

يبدأ فرعًا جديدًا للتطوير، بدءًا من المراجعة المحدّدة فيملف البيان.

تقدّم الوسيطة BRANCH_NAME وصفًا موجزًا للتغيير الذي تحاول إجراؤه على المشاريع. وإذا كنت لا تعرف ذلك، يمكنك استخدام الاسم default.

تحدّد الوسيطة project-list المشاريع التي تشارك في هذا الموضوع الفرع.

status

repo status [project-list]

يقارن شجرة العمل بالمنطقة المرحلية (الفهرس) وأحدث إتمام في هذا الفرع (الرأس) في كل مشروع محدد. تعرِض هذه السمة سطرًا تلخيصيًا لكل ملف يتضمّن اختلافًا بين هذه الحالات الثلاث.

للاطّلاع على حالة الفرع الحالي فقط، شغِّل repo status .. يتم إدراج معلومات الحالة حسب المشروع. يتم استخدام رمز مكوّن من حرفين لكل ملف في المشروع.

في العمود الأول، يشير الحرف الكبير إلى كيفية اختلاف منطقة الإعداد عن الحالة الأخيرة التي تم الالتزام بها.

Letter المعنى الوصف
- لم يتغيّر موقفي متطابق في العنوان والفهرس
A مضاف غير متوفّر في قسم HEAD، بل في الفهرس
M تاريخ التعديل في العنوان، تم تعديلها في الفهرس
D محذوف في قسم HEAD، وليس في الفهرس
R تمت إعادة التسمية غير متوفّر في قسم HEAD، تم تغيير المسار في الفهرس
C تم النسخ غير مضمّنة في العنوان، تم نسخها من ملف آخر في الفهرس
T تم تغيير الوضع المحتوى نفسه في العنوان والفهرس، تم تغيير الوضع
U لم يتم دمجها تعارض بين HEAD والفهرس، يجب حلّه

في العمود الثاني، يشير الحرف الصغير إلى كيفية اختلاف الدليل العامل عن الفهرس.

Letter المعنى الوصف
- جديد/غير معروف غير مضمّنة في الفهرس، بل في شجرة العمل
د تاريخ التعديل في الفهرس، في شجرة العمل، تم تعديله
يوم محذوف في الفهرس، وليس في شجرة العمل

التعامل مع أخطاء المستودع

git commit -a # Commit local changes first so they aren't lost.
repo start branch-name # Start the branch
git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start
repo upload .

يظهر الخطأ repo: error: no branches ready for upload عندما لا يتم تشغيل الأمر repo start في بداية الجلسة. لاستردادها، يمكنك التحقّق من معرّف الإضافة، وبدء فرع جديد ثم دمجه.