تكمّل أداة Repo نظام Git من خلال تبسيط العمل على مستودعات متعددة. للاطّلاع على شرح للعلاقة بين Repo وGit، يُرجى الرجوع إلى مقالة أدوات التحكّم في المصدر. لمزيد من التفاصيل حول Repo، يُرجى الاطّلاع على ملف 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 المتبقية، يجب أن يكون دليل العمل الحالي إما الدليل الرئيسي لـ .repo/ أو دليلاً فرعيًا من الدليل الرئيسي.
مزامنة
repo sync [project-list]
تنزِّل هذه الميزة التغييرات الجديدة وتعدِّل ملفات العمل في بيئتك المحلية، ما يحقّق بشكل أساسي git fetch على جميع مستودعات Git. إذا شغّلت repo sync بدون وسيطات، تتم مزامنة الملفات لجميع المشاريع.
عند تشغيل repo sync، يحدث ما يلي:
إذا لم تتم مزامنة المشروع من قبل، يكون
repo syncمكافئًا لـgit clone؛ يتم نسخ جميع الفروع في المستودع البعيد إلى دليل المشروع المحلي.إذا تمت مزامنة المشروع من قبل، يكون
repo syncمكافئًا لما يلي:git remote updategit 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 look up 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 لضبط اسم الموضوع على اسم الفرع المحلي.
الاختلاف
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
تنفِّذ هذه الميزة أمر shell المحدّد في كل مشروع. تتيح repo forall متغيرات البيئة الإضافية التالية:
- يتم ضبط
REPO_PROJECTعلى الاسم الفريد للمشروع. REPO_PATHهو المسار النسبي إلى جذر البرنامج.REPO_REMOTEهو اسم النظام البعيد من البيان.REPO_LREVهو اسم النسخة من البيان، مترجَمًا إلى فرع تتبُّع محلي. استخدِم هذا المتغيّر إذا كنت بحاجة إلى تمرير نسخة البيان إلى أمر Git يتم تنفيذه محليًا.REPO_RREVهو اسم النسخة من البيان، تمامًا كما هو مكتوب في البيان.
الخيارات:
-c: الأمر والوسيطات المطلوب تنفيذهما. يتم تقييم الأمر من خلال/bin/shويتم تمرير أي وسيطات بعده كمعلّمات موضعية في shell.-p: يمكنك عرض عناوين المشاريع قبل إخراج الأمر المحدّد. يتم تحقيق ذلك من خلال ربط الأنابيب بتدفّقات stdin وstdout وstderr للأمر، وتوجيه جميع النتائج إلى تدفّق مستمر يتم عرضه في جلسة تنقل واحدة.-v: يمكنك عرض الرسائل التي يكتبها الأمر إلى stderr.
prune
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 والفهرس، يجب حلّه |
في العمود الثاني، يشير حرف صغير إلى كيفية اختلاف دليل العمل عن الفهرس.
| خطاب | المعنى | الوصف |
|---|---|---|
| - | جديد/غير معروف | غير متوفّر في الفهرس، متوفّر في شجرة العمل |
| m | معدَّل | متوفّر في الفهرس، متوفّر في شجرة العمل، تم تعديله |
| d | محذوفة | متوفّر في الفهرس، غير متوفّر في شجرة العمل |
التعامل مع أخطاء Repo
git commit -a # Commit local changes first so they aren't lostrepo start branch-name # Start the branchgit reset --hard HEAD@{1} # Reset the branch so that it matches the commit before repo startrepo upload .
يظهر الخطأ repo: error: no branches ready for upload عندما لا يتم تشغيل الأمر repo start في بداية الجلسة. للاسترداد، تحقَّق من رقم تعريف عملية الإكمال، وابدأ فرعًا جديدًا، ثم ادمِجه.
بنية مستودع Git
بالنسبة إلى Android، لا يتم تضمين مستودعات Git (المشاريع) في بعضها. يرتبط كل مشروع بدليل معيّن في شجرة المصدر، وتكون جميع الأدلة والملفات الفرعية ضمن هذا الدليل جزءًا من المشروع نفسه.
تجنَّب استخدام ميزة git submodule في Repo لتطوير Android.