مرجع أمر 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 بيانات العنصر عبر خادمه، يحوّل كل تثبيت إلى تغيير حتى يتمكّن المراجعون من التعليق على تثبيت محدّد. لدمج عدة عمليات إرسال نقاط تفتيش في عملية إرسال واحدة، استخدِم 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 اختصارًا).

بالنسبة إلى التغييرات ذات الصلة، من المفيد إبقاء جميع طلبات التعديل في الموضوع نفسه. يمكنك إضافة اسم موضوع أثناء التحميل باستخدام --topic=TOPIC. أو يمكنك فقط ضبط -t لتحديد اسم الموضوع نفسه باسم الفرع المحلي.

diff

repo diff [project-list]

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

تنزيل

repo download target 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: عرض الرسائل التي يكتبها الأمر في stderr

الخوخ المجفف

repo prune [project-list]

تؤدي هذه العملية إلى إزالة (حذف) المواضيع التي سبق دمجها.

بدء

repo start branch-name [project-list]

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

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

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

status

repo status [project-list]

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

للاطّلاع على حالة الفرع الحالي فقط، شغِّل 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 في بداية الجلسة. لاستردادها، يمكنك التحقّق من معرّف الإضافة، وبدء فرع جديد ثم دمجه.