تكمّل أداة Repo نظام Git من خلال تسهيل العمل على مستودعات متعددة. للحصول على شرح حول العلاقة بين Repo وGit، يُرجى الاطّلاع على أدوات التحكّم في المصدر. لمزيد من التفاصيل حول Repo، يُرجى الاطّلاع على ملف Repo README.
يأخذ استخدام المستودع الشكل التالي:
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
: يمكنك المتابعة لمزامنة المشاريع الأخرى حتى إذا تعذّرت مزامنة أحد المشاريع.-j threadcount
: تقسيم عملية المزامنة على سلاسل محادثات مختلفة لإكمالها بشكل أسرع احرص على عدم إرهاق جهازك، واحتفظ ببعض سعة وحدة المعالجة المركزية (CPU) لتنفيذ مهام أخرى. للاطّلاع على عدد وحدات المعالجة المركزية المتاحة، شغِّل أولاً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
تنزّل هذه السمة التغيير المحدّد من نظام المراجعة وتتيحه في دليل العمل المحلي الخاص بمشروعك.
على سبيل المثال، لتنزيل
change 23823 في الدليل
platform/build
، اتّبِع الخطوات التالية:
repo download platform/build 23823
يؤدي تنفيذ الأمر repo sync
إلى إزالة أي عمليات تثبيت تم استرجاعها باستخدام الأمر repo download
. أو يمكنك الاطّلاع على الفرع البعيد باستخدام git checkout m/main
.
forall
repo forall [project-list] -c command
ينفّذ أمر shell المحدّد في كل مشروع. توفّر 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 .
. يتم عرض معلومات الحالة حسب المشروع. يتم استخدام رمز مكوّن من حرفين لكل ملف في المشروع.
في العمود الأول، يشير حرف كبير إلى الاختلاف بين منطقة التدريج وآخر حالة تم الالتزام بها.
خطاب | المعنى | الوصف |
---|---|---|
- | لم يتغيّر موقفي | المحتوى نفسه في HEAD والفهرس |
A | تمّت الإضافة | غير متوفّر في قسم HEAD، ولكنّه متوفّر في الفهرس |
M | تاريخ التعديل | في HEAD، تم التعديل في الفهرس |
D | محذوف | في HEAD، وليس في الفهرس |
R | تمت إعادة التسمية | غير متوفّر في قسم HEAD، وتم تغيير المسار في الفهرس |
C | تم النسخ | غير متوفّر في HEAD، تم نسخه من آخر في الفهرس |
T | تم تغيير الوضع | المحتوى نفسه في HEAD والفهرس، وتم تغيير الوضع |
U | تم إلغاء الدمج | تعارض بين HEAD والفهرس، يجب حلّه |
في العمود الثاني، يشير حرف صغير إلى كيفية اختلاف دليل العمل عن الفهرس.
خطاب | المعنى | الوصف |
---|---|---|
- | جديد/غير معروف | غير متوفّر في الفهرس، ولكنّه متوفّر في شجرة العمل |
متر | تاريخ التعديل | في الفهرس، في شجرة العمل، تم التعديل |
يوم | محذوف | في الفهرس، وليس في شجرة العمل |
التعامل مع أخطاء المستودع
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
في بداية الجلسة. للاسترداد، يمكنك التحقّق من معرّف عملية الإيداع وبدء فرع جديد ثم دمجه.