تكمّل أداة 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 والفهرس، ويجب حلّه |
في العمود الثاني، يشير حرف صغير إلى كيفية اختلاف دليل العمل عن الفهرس.
| خطاب | المعنى | الوصف |
|---|---|---|
| - | جديد/غير معروف | غير متوفّر في الفهرس، ولكنّه متوفّر في شجرة العمل |
| m | معدَّل | في الفهرس، في شجرة العمل، تم التعديل |
| يوم | محذوفة | في الفهرس، وليس في شجرة العمل |
التعامل مع أخطاء المستودع
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 في بداية الجلسة. لإجراء عملية الاسترداد، يمكنك التحقّق من معرّف عملية الإيداع، وبدء فرع جديد ثم دمجه.
بنية مستودع Git
في Android، لا تكون مستودعات Git (المشاريع) متداخلة. يرتبط كل مشروع بدليل معيّن في شجرة المصدر، وتكون جميع الأدلة الفرعية والملفات ضمن هذا الدليل جزءًا من المشروع نفسه.
تجنَّب استخدام ميزة git submodule في Repo لتطوير تطبيقات Android.