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