دليل جيريت
يشرح هذا الدليل كيفية تثبيت جيت واستخدامه لإنشاء وتعديل طلبات التغيير في جيريت.
- للاطلاع على وثائق مرجعية لمهام محددة، راجع Gerrit/Advanced usage بدلًا من ذلك.
- إذا كنت ترغب في التدرّب على كيفية استخدام جيريت دون كتابة باتش لمشروع برمجي «حقيقي» تابع لويكيميديا، فاستخدم بيئة اختبار جيريت بدلًا من ذلك.
في هذا الدليل، تبدأ الأوامر التي يجب إدخالها بعلامة الدولار داخل مربع، مثل هذا: command.
لا تُدخِل البادئة $.
إذا كان الأمر يتضمّن أيضًا متغيّرًا يجب عليك تغييره بنفسك، فسيُعرض المتغيّر باللون الأحمر: command variable.
ما هو جيت؟
جيت هو نظام تحكم بالإصدارات موزع مجاني ومفتوح المصدر. تعني «موزّع» أنه لا توجد نسخة مركزية من المستودع. باستخدام جيت، بمجرد استنساخ المستودع، سيكون لديك نسخة كاملة الوظائف من الشفرة المصدرية، مع جميع الفروع والإصدارات الموسومة تحت تصرّفك.
إنشاء حساب مطوّر في ويكيميديا
إذا لم يكن لديك حساب مطوّر في ويكيميديا بعد، أنشئ حسابًا. سيُستخدم نفس اسم المستخدم وكلمة المرور لتسجيل الدخول إلى جيريت أدناه.
إعداد جيت
توضح هذه التعليمات كيفية تثبيت جيت كأداة تعمل عبر سطر الأوامر (نافذة الطرفية). إذا كنت تفضّل واجهة مستخدم رسومية (GUI) بدلًا من سطر الأوامر، فاطّلع على قائمة العملاء التي يديرها مشروع جيت. للاطلاع على تعليمات تثبيت بديلة، راجع الوثائق الرسمية.
التثبيت
اتبع تثبيت جيت لتعلّم كيفية تثبيت جيت على نظام التشغيل الخاص بك.
إعداد جيت
git config -l.الآن بعد تثبيت جيت، حان الوقت لإعداد معلوماتك الشخصية. يجب أن تحتاج إلى القيام بذلك مرة واحدة فقط. يمكنك أيضًا تغيير معلوماتك الشخصية في أي وقت عن طريق تشغيل هذه الأوامر مرة أخرى.
يتتبّع جيت من يقوم بكل عملية commit من خلال التحقق من اسم المستخدم والبريد الإلكتروني. بالإضافة إلى ذلك، تُستخدم هذه المعلومات لربط عمليات commit الخاصة بك بحسابك في جيريت.
أدخل الأمرين أدناه لتعيين اسم المستخدم وعنوان البريد الإلكتروني الخاص بك.
استبدل Gerrituser باسم مستخدم حساب مطوّر ويكيميديا الخاص بك (كان يُعرف سابقًا باسم مستخدم «Wikitech» أو «جيريت» أو «LDAP»، وجميعها تشير إلى الشيء نفسه).
استبدل gerrituser@example.com بعنوان بريدك الإلكتروني الخاص بك.
واستبدل shell_user باسم مستخدم الصدفة (Shell) الذي اخترته عند إنشاء حساب مطوّر ويكيميديا:
git config --global user.email "gerrituser@example.com"
git config --global user.name "My Name"
git config --global url."ssh://shell_user@gerrit.wikimedia.org:29418/".insteadOf "https://gerrit.wikimedia.org/r/"
git config --global gitreview.remote origin
git config --global gitreview.username Gerrituser
إعداد مفاتيح SSH في جيريت
نستخدم مفتاح SSH لإنشاء اتصال آمن بين حاسوبك وجيريت.
يوصي فريق أمان ويكيميديا، اعتبارًا من أغسطس 2021، بأن يستخدم المستخدمون الذين ينشئون مفاتيح SSH النوع ed25519 للحصول على أفضل أمان وأداء.
الحصول على مفتاح SSH الخاص بك
اتبع SSH keys#إنشاء مفتاح SSH جديد.
إضافة المفتاح العام SSH إلى حسابك في جيريت
- سجّل الدخول إلى واجهة الويب الخاصة بجيريت. اسم المستخدم وكلمة المرور الخاصة بجيريت هي نفسها الخاصة بـحساب مطوّر ويكيميديا الخاص بك.
- انقر على اسم المستخدم الخاص بك في الزاوية العلوية اليمنى، ثم اختر «Settings».
- انقر على «SSH Keys» في القائمة على اليسار.
- الصق المفتاح العام (SSH Public Key) الخاص بك في الحقل المخصّص، ثم انقر على «ADD NEW SSH KEY».
يرجى ملاحظة أنه يجب عليك إضافة مفاتيح SSH الخاصة بك في واجهة ويب جيريت على gerrit.wikimedia.org حتى إذا كنت قد أضفتها بالفعل في مدير الهوية في Cloud VPS / Toolforge على idm.wikimedia.org. هذه الأنظمة منفصلة ولا تشارك مفاتيح SSH فيما بينها.
اختبار اتصال SSH مع جيريت
اتصل بخادم جيريت عبر ssh للتحقق مما إذا كان كل شيء يعمل كما هو متوقع.
استبدل shell_user باسم مستخدم Shell الخاص بك كما هو موضح في إعدادات جيريت الخاصة بك:
ssh -p 29418 shell_user@gerrit.wikimedia.org
- انتبه وتحقق من أن «بصمة المفتاح» (key fingerprint) مطابقة لـبصمة SSH الخاصة بـgerrit.wikimedia.org:29418. إذا كانت متطابقة، فأجب «Yes» على السؤال «Are you sure you want to continue connecting?». ثم أدخل عبارة المرور (passphrase) الخاصة بمفتاحك.
- يجب أن تظهر لك رسالة «Welcome to Gerrit Code Review». يجب أن يُظهر السطر الأخير «Connection to gerrit.wikimedia.org closed.».
- إذا واجهت مشكلات، فاستخدم
ssh -p 29418 -v shell_user@gerrit.wikimedia.org(استبدلshell_userباسم مستخدم shell الخاص بك). سيقدّم-vمخرجات تفصيلية (verbose) للمساعدة في تحديد المشكلات. اقرأ استكشاف أخطاء جيريت وإصلاحها.
يبدو مثال رسالة نجاح اتصال SSH مع جيريت كما يلي:
gerrituser@machine:/mw/sandbox$ ssh -p 29418 gerrituser@gerrit.wikimedia.org The authenticity of host '[gerrit.wikimedia.org]:29418 ([208.80.154.85]:29418)' can't be established. ed25519 key fingerprint is dc:e9:68:7b:99:1b:27:d0:f9:fd:ce:6a:2e:bf:92:e1. Are you sure you want to continue connecting (yes/no)? yes Warning permanently added '[gerrit.wikimedia.org]:29418 ([208.80.154.85]:29418)' (ed25519) to the list of known hosts. Enter passphrase for key '/home/gerrituser/.ssh/id_ed25519': **** Welcome to Gerrit Code Review **** Hi gerrituser, you have successfully connected over SSH. Unfortunately, interactive shells are disabled. To clone a hosted Git repository, use: git clone ssh://gerrit.wikimedia.org:29418/REPOSITORY_NAME.git Connection to gerrit.wikimedia.org closed. gerrituser@machine:/mw/sandbox$
تنزيل الكود باستخدام جيت
الملعب
إذا كنت ترغب في التدرّب على استخدام جيريت، يمكنك تنزيل (ويُعرف أيضًا باسم "استنساخ") المستودع الذي يستخدمه هذا الدليل التعليمي والمسمّى «sandbox».
شغّل الأمر التالي في سطر الأوامر عبر Git Bash:
git clone https://gerrit.wikimedia.org/r/sandbox
سيؤدي هذا إلى نسخ السجل الكامل وقاعدة الشيفرة الخاصة بمستودع امتداد «sandbox» إلى جهازك.
سيكون لديك مجلد عمل للفرع الرئيسي الخاص بالامتداد (ويُسمّى عادةً أيضًا «git master»).
ادخل إلى المجلد الجديد (باستخدام الأمر cd sandbox).
يمكنك الآن الاطلاع على الشيفرة والبدء في تعديلها.
المستودعات الموجودة
لن يمنحك استنساخ مستودع Sandbox إعداد بيئة تطوير أو تثبيتًا يعمل لبرنامج ميدياويكي . (يتطلب التشغيل وجود نواة ميدياويكي ووضع الشيفرة التي استنسختها في موقع يتوقعه خادم الويب لديك.) راجع التنزيل من جيت لمعرفة كيفية تنزيل نواة ميدياويكي أو الامتدادات أو الواجهات أو أي مستودع مشروع آخر مستضاف على gerrit.wikimedia.org باستخدام جيت.
Vagrant
إذا كنت قد نزّلت ميدياويكي أو الامتدادات باستخدام Vagrant، فتأكد من أنك ضبطت جيت لدفع الشيفرة باستخدام SSH بدلًا من HTTPS.
التحضير للعمل مع جيريت
يتطلب جيريت أن تحتوي رسالة الالتزام (commit message) الخاصة بك على معرّف تغيير (Change-Id).
تبدو بالشكل Change-Id: Ibd3be19ed1a23c8638144b4a1d32f544ca1b5f97 وتبدأ بالحرف I (أي الحرف اللاتيني الكبير I).
في كل مرة تقوم فيها بتعديل التزام (commit) موجود لتحسين التصحيح (patch) حالي في جيريت، يبقى معرّف التغيير (Change-Id) كما هو، بحيث يفهم جيريت أنها نسخة جديدة من التصحيح (patch set) جديدة لنفس التغيير البرمجي.
توجد إضافة لـجيت تُسمّى git-review تضيف سطر Change-Id إلى التزاماتك (commits).
يُنصح باستخدام git-review.
فهو يجعل إعداد نسخة جيت المستنسخة الخاصة بك، وإرسال التغييرات، أو جلب التغييرات الموجودة أسهل.
تثبيت git-review
لمزيد من التفاصيل، يُرجى الاطلاع على جيريت/git-review#التثبيت.
- استخدم أداة إدارة الحزم الرسومية الخاصة بتوزيعة لينكس لديك لتثبيت حزمة
git-review. - إذا لم تكن توزيعتك توفر حزمة git-review، فراجع git-review للاطلاع على خيارات أخرى، مثل تثبيت git-review باستخدام مُثبّت حزم بايثون pip.
- إذا كنت تستخدم FreeBSD، فبإمكانك تثبيت git-review من خلال نظام المنافذ Ports.
- يُرجى الاطلاع على git-review على ويندوز.
- بالنسبة إلى OS X 10.11 El Capitan والإصدارات الأحدث، اتبع الطريقة الأولى.
- في الإصدارات الأقدم من 10.11، استخدم مُثبّت حزم بايثون pip باتباع الطريقة الثانية.
إعداد git-review
بعد تنزيل («استنساخ») مستودع، تحتاج إلى إعداده للعمل مع git-review. سيحدث ذلك تلقائيًا عند أول محاولة لإرسال التزام (commit)، لكن من الأفضل عمومًا القيام به مباشرة بعد الاستنساخ. تأكد من أنك داخل مجلد المشروع الذي استنسخته (وإلا فستظهر لك الرسالة: "fatal: Not a git repository"). ثم نفّذ هذا الأمر:
git review -s --verbose
في نهاية المخرجات تقريبًا، ينبغي أن ترى شيئًا مشابهًا لهذا:
Found origin Push URL: ssh://gerrit.wikimedia.org:29418/PROJECT Fetching commit hook from: scp://gerrit.wikimedia.org:29418/hooks/commit-msg 2019-02-19 12:40:16.712892 Running: scp -P29418 gerrit.wikimedia.org:hooks/commit-msg .git/hooks/commit-msg
أو شيئًا مشابهًا لهذا إذا كنت تستخدم إصدارًا أحدث من git-review:
2026-03-30 17:56:53.619450 Running: git config --get gitreview.remote 2026-03-30 17:56:53.622637 ... gitreview.remote = origin 2026-03-30 17:56:53.622659 Config['remote'] = origin 2026-03-30 17:56:53.622668 Running: git config --get gitreview.branchauthor 2026-03-30 17:56:53.626113 Config['branchauthor'] = name 2026-03-30 17:56:53.626151 Running: git config --get gitreview.scheme 2026-03-30 17:56:53.629775 Config['scheme'] = ssh 2026-03-30 17:56:53.629810 Running: git config --get gitreview.hostname 2026-03-30 17:56:53.633082 Config['hostname'] = gerrit.wikimedia.org 2026-03-30 17:56:53.633108 Running: git config --get gitreview.port 2026-03-30 17:56:53.636436 Config['port'] = 29418 2026-03-30 17:56:53.636460 Running: git config --get gitreview.project 2026-03-30 17:56:53.639754 Config['project'] = operations/mediawiki-config.git 2026-03-30 17:56:53.639779 Running: git log --color=never --oneline HEAD^1..HEAD 2026-03-30 17:56:53.646336 Running: git remote 2026-03-30 17:56:53.651991 Running: git branch -a --color=never 2026-03-30 17:56:53.660199 Running: git rev-parse --show-toplevel --git-dir 2026-03-30 17:56:53.667223 Running: git config --get core.hooksPath 2026-03-30 17:56:53.672381 Running: git config --get core.hooksPath 2026-03-30 17:56:53.679571 Running: git submodule foreach cp -p .git/hooks/commit-msg "$(git rev-parse --git-dir)/hooks/"
قد يطلب منك هذا اسم مستخدم Git الخاص بك، إذا كان مختلفًا عن اسم مستخدم shell الذي تستخدمه.
git-review، فيمكنك استخدام رافع التصحيحات في جيريت أو دليل جيريت/ويب لإرسال التصحيح.يستخدم git-review الفرع master افتراضيًا.
إذا كان المستودع الذي تعمل عليه يستخدم فرعًا آخر، مثل main، فستحتاج إلى ضبط متغير الإعداد gitreview.branch.
يمكن القيام بذلك باستخدام الأمر التالي (حيث إن main هو اسم الفرع):
git config --add gitreview.branch main
إرسال تصحيح
تأكد من أنك استنسخت مستودع الشيفرة الذي تهتم به (انظر تنزيل الشيفرة باستخدام جيت أعلاه).
تأكد من أنك داخل مجلد مستودع الشيفرة (يُظهر لك الأمر pwd موقعك الحالي).
تحديث فرع التطوير الرئيسي
تأكد من أن فرع التطوير الرئيسي (الفرع الذي أُنشئ عند استنساخ المستودع لأول مرة) مُحدَّث:
git pull origin master
لكن انتبه إلى أن بعض المستودعات تستخدم اسمًا مختلفًا لفرع التطوير الرئيسي (فعلى سبيل المثال، تستخدم بعض المستودعات main بدلًا من master، أو يستخدم مستودع operations/puppet الفرع production بدلًا من master).
إنشاء فرع
أولًا، أنشئ فرعًا محليًا لتغييرك الجديد.
استبدل branch-name أدناه باسم قصير لكن وصفي إلى حدّ معقول (مثل T1234 إذا كانت هناك مهمة فبريكاتور مقابلة لتغييراتك، أو cleanup-something، أو badtitle-error).
سيستخدم الآخرون هذا الاسم أيضًا للتعرّف على فرعك.
git checkout -b branch-name origin/master
gerrituser@example:~/dev/mw$ git checkout -b cleanup-something origin/master # Switched to a new branch 'cleanup-something' gerrituser@example:~/dev/mw$ git branch * cleanup-something master
سيؤدي هذا إلى إنشاء فرع جديد (باسم branch-name) انطلاقًا من أحدث نسخة من فرع master، ثم التبديل إليه تلقائيًا.
في المثال أعلاه، سمّينا ذلك الفرع الجديد cleanup-something.
أجرِ تغييراتك
أجرِ تغييرات على شيفرتك المحلية.
استخدم محرر النصوص المفضل لديك وعدّل ملفًا.
في المثال أدناه، سنقوم بتعديل الملف README.md وإضافة كلمة.
ثم أغلق محرر النصوص وتحقق من التغييرات التي أجريتها منذ آخر التزام (commit)، داخل الملف (أو الملفات) وداخل المجلد:
git diff
gerrituser@machine:/mw/sandbox$ git diff diff --git a/README.md b/README.md index 1d25b27..bc54021 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Hello world! -You can make test changes and experiment with Gerrit in this repository! +You can make test changes and experiment with Wikimedia Gerrit in this repository! Don't worry about messing this repository up; it is meant for testing. gerrituser@machine:/mw/examples$
يعرض git diff تغييراتك بـتنسيق الفروق الموحد (unified diff format): الأسطر المحذوفة تُسبق بعلامة ناقص (-) والأسطر المضافة تُسبق بعلامة زائد (+).
هذه التغييرات لم تُدرج (staged) بعد (عبر git add) للالتزام (commit) التالي.
إدراج تغييراتك للالتزام (commit)
شغّل git status لتحديد أيٍّ من تغييراتك يجب أن يصبح جزءًا من الالتزام (commit) الخاص بك.
سيعرض قائمة بجميع الملفات التي قمت بتغييرها داخل المجلد.
في هذه المرحلة، ستعرض المخرجات «no changes added to commit» كسطر أخير.
استخدم git add لجعل ملفك (أو ملفاتك) المتغيرة جزءًا من الالتزام (commit) التالي.
في المثال أعلاه قمنا بتعديل الملف README.md، لذلك سيكون الأمر:
git add README.md
أي ملفات قمت بتغييرها ولم تمررها إلى git add سيتم تجاهلها عند تشغيل git commit في الخطوة التالية.
git status.
بعد تشغيلك للأمر git add، لن يعرض git status السطر «no changes added to commit» بعد الآن.git diff --cached لرؤية التغييرات المدرجة (staged) والتي ستدخل في الالتزام (commit) التالي.
ستبدو المخرجات مطابقة لأمر git diff أعلاه.
الالتزام (Commit) بتغييراتك المدرجة
بمجرد رضاك عن قائمة التغييرات المضافة عبر git add، يمكنك تحويل هذه التغييرات إلى التزام (commit) في مستودعك المحلي باستخدام
git commit
Short subject line More details. The blank line between the subject and body is mandatory. The subject line is used to represent the commit in code-review emails, search results, git-rebase, and more. Bug: T999999 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch cleanup-something # Your branch is up to date with 'origin/master'. # # Changes to be committed: # modified: README.md
سيُطلب منك بعد ذلك في محرر النصوص الخاص بك إضافة ملخص وصفي للالتزام (commit) الخاص بك. يجب عليك اتباع إرشادات رسالة الالتزام. هذا هو ما سيراه الآخرون عند النظر إلى سجل التغييرات في مستودع الشيفرة.
احفظ رسالة الالتزام وأغلق محرر النصوص. سيُعرض ملخص (معرف الالتزام، سطر الموضوع الخاص بك، والملفات والأسطر التي تم تغييرها).
عندما تقوم بـ git commit، فإنك تلتزم (committing) بنسختك المحلية.
الاستعداد لدفع التزامك إلى جيريت
زامن مجموعة تغييراتك مع أي تغييرات قد حدثت في الفرع الرئيسي أثناء عملك («rebasing» أو إعادة البناء). من داخل فرعك، شغّل:
git pull --rebase origin master
gerrituser@machine:/mw/sandbox$ git pull --rebase origin master From ssh://gerrit.wikimedia.org:29418/sandbox * branch master -> FETCH_HEAD Current branch cleanup-something is up to date. gerrituser@machine:/mw/sandbox$
git pull --rebase origin master بجلب الالتزامات الجديدة من المستودع البعيد ثم يعيد بناء (rebase) التزاماتك المحلية فوقها.
سيضع التغييرات التي أجريتها في فرعك جانبًا مؤقتًا، ويطبّق جميع التغييرات التي حدثت في الفرع الرئيسي على فرع عملك، ثم يدمج (يعيد الالتزام) بجميع التغييرات التي أجريتها مرة أخرى في الفرع. القيام بذلك سيساعد في تجنب تعارضات الدمج (merge conflicts) في المستقبل.
بالإضافة إلى ذلك، فإنه يمنحك الفرصة لاختبار تغييراتك مقابل أحدث شيفرة في الفرع الرئيسي.أنت الآن جاهز لدفع شيفرتك إلى جيريت للمراجعة. إذا قمت بعدة التزامات مرتبطة، فكر في دمجها في التزام واحد للمراجعة.
دفع التزامك إلى جيريت
إذا اتبعت #التحضير للعمل مع جيريت أعلاه وقمت بتثبيت git-review وتشغيل git review -s، فإن الأمر لدفع التغييرات إلى جيريت هو:
git review
gerrituser@machine:/mw/sandbox$ git review Creating a git remote called 'gerrit' that maps to: ssh://gerrit.wikimedia.org:29418/sandbox.git Your change was committed before the commit hook was installed. Amending the commit to add a gerrit change id. remote: remote: Processing changes: new: 1, done remote: remote: New Changes: remote: https://gerrit.wikimedia.org/r/#/c/sandbox/+/563720 Test for https://www.mediawiki.org/wiki/Gerrit/Tutorial remote: To ssh://gerrit.wikimedia.org:29418/sandbox.git * [new branch] HEAD -> refs/for/master%topic=cleanup-something gerrituser@machine:/mw/examples$
عند النجاح، ستحصل على تأكيد ورابط لمجموعة التغييرات في جيريت. في المثال أعلاه، هذا الرابط هو: https://gerrit.wikimedia.org/r/#/c/sandbox/+/563720
تهانينا! التصحيح (patch) الخاص بك موجود الآن في جيريت ونأمل أن تتم مراجعته قريبًا!
<span id="If_git review_fails">
إذا فشل git review
إذا طُلب منك إدخال بيانات اعتماد اسم المستخدم وكلمة المرور عند تشغيل git review، فهذا يعني أن جيت لم يُعد بعد لاستخدام SSH.
راجع الخطوات في #إعداد جيت. على وجه الخصوص، شغّل الأمر التالي:
git config --global url."ssh://shell_user@gerrit.wikimedia.org:29418/".insteadOf "https://gerrit.wikimedia.org/r/"
لا بأس بتشغيل هذا الأمر مرة أخرى إذا لم تكن متأكدًا مما إذا كنت قد قمت به بالفعل.
استبدل shell_user باسم مستخدم الصدفة (shell) الخاص بحساب مطور ويكيميديا الخاص بك.
إذا ظهر لك خطأ Permission denied (publickey). fatal: Could not read from remote repository.، فراجع التعليمات في SSH keys#Add SSH Private key to use with Git للتأكد من تشغيل وكيل SSH وإضافة هويتك. إذا أغلقت صدفة Git Bash الخاصة بك، فسيتم تسجيل خروجك وستحتاج إلى إعادة اتباع هذه التعليمات في كل مرة.
عرض التغيير / الخطوات التالية
افتح الرابط الخاص بمجموعة تغييرات جيريت الخاصة بك في متصفح الويب.
ضمن «Files» (الملفات)، بعد النقر على السهم المتجه لأسفل في أقصى يمين أي ملف في القائمة، يمكنك رؤية الفروق (diff) لتغييراتك لكل ملف: تظهر الأسطر القديمة باللون الأحمر وتظهر الأسطر الجديدة باللون الأخضر.
إذا كان الالتزام الخاص بك يعالج تذكرة في Phabricator، فسيُضاف تعليق تلقائيًا في مهمة فبريكاتور إذا اتبعت إرشادات رسالة الالتزام. إذا لم تفعل ذلك، فيمكنك إما إصلاح رسالة الالتزام الخاصة بك (عن طريق إنشاء مجموعة تصحيح محدثة)، أو إضافة تعليق يدويًا على تذكرة فبريكاتور تلك يتضمن رابطًا لمجموعة تغييراتك في جيريت.
مواقف شائعة أخرى
انظر أيضًا الاستخدام المتقدم لجيريت إذا لم تكن حالتك مشمولة هنا.
دمج عدة التزامات في التزام واحد عبر rebase
إذا أجريت عدة التزامات (commits) مرتبطة بمستودعك المحلي قبل الرغبة في إرسالها للمراجعة، فيجب عليك دمج (squash) تلك الالتزامات في التزام واحد.
يتيح لك الخيار --interactive أو -i تغيير (إعادة كتابة) سجل الالتزامات الخاص بك.
لكل التزام، يمكنك تعديل وتغيير رسالة الالتزام، أو إضافة ملفات أو إزالتها، أو إجراء تعديلات أخرى.
أولًا، تحتاج إلى إخبار جيت بمدى البعد الذي تريد السحب (pull) منه في السجل. للحصول على قائمة بجميع التغييرات في فرعك:
git rebase -i origin/master
يمكنك أيضًا تحديد قائمة التغييرات الأخيرة المعروضة. «HEAD~3» يعني سحب آخر ثلاثة التزامات:
git rebase -i HEAD~3
بعد كتابة هذا الأمر، سيعرض محرر النصوص التزاماتك بترتيب عكسي وقائمة بالأوامر المتاحة:
pick aa8cf1d Adding method customFilterFunctionGetRiskyCountryCodeScore() to GatewayAdapter. pick 38828e2 Adding $wgDonationInterfaceCustomFiltersFunctionsRiskyCountries to donationinterface.php pick be33007 Fix a typo # Rebase 95ccd28..be33007 onto 95ccd28 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
بما أننا نريد إرسال التزام واحد فقط للمراجعة، فسنقوم بدمج (squash) آخر التزامين في الالتزام الأول.
وبالتالي قم بتغيير كل شيء باستثناء الـ pick الأول إلى squash:
pick aa8cf1d Adding method customFilterFunctionGetRiskyCountryCodeScore() to GatewayAdapter. squash 38828e2 Adding $wgDonationInterfaceCustomFiltersFunctionsRiskyCountries to donationinterface.php squash be33007 Fix a typo
عندما تنتهي من الانتقاء والدمج (squashing) وتحفظ الملف، سيُفتح ملف آخر في محرر النصوص الخاص بك للسماح لك بتعديل ودمج رسائل الالتزام الخاصة بك.
كن حريصًا على الاحتفاظ بواحد فقط من أسطر Change-Id وأن يكون في أسفل الرسالة بعد سطر فارغ واحد.
ستُوضع رسائلك من التزاماتك السابقة تلقائيًا في هذه الرسالة:
# This is a combination of 3 commits. # The first commit's message is: (mingle-fr-2012-69) Adding a custom filter for risky countries. Adding method customFilterFunctionGetRiskyCountryCodeScore() to GatewayAdapter. # This is the 2nd commit message: Adding $wgDonationInterfaceCustomFiltersFunctionsRiskyCountries to donationinterface.php # This is the 3rd commit message: Fix a typo Change-Id: I33e44ec0d93628d9a53c15e08eb89f352b7d5fe0 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # Not currently on any branch. # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: donationinterface.php # modified: gateway_common/gateway.adapter.php #
تذكر أن تضع رسالة الملخص (المحدثة) في الالتزام. في هذه الحالة ستكون رسالة الملخص الجديدة هي:
(mingle-fr-2012-69) Adding a custom filter for risky countries.
Change-Id تختاره.إذا سارت الأمور على ما يرام، يجب أن ترى رسالة نجاح إعادة البناء (rebase):
[detached HEAD 02f5e63] (mingle-fr-2012-69) Adding a custom filter for risky countries. 2 files changed, 92 insertions(+), 3 deletions(-) Successfully rebased and updated refs/heads/mingle-fr-2012-69.
بعد ذلك، أرسل التصحيح (patch) للمراجعة:
git review
يجب أن ترى رسالة مثل هذه تُظهر أن مراجعة جيت الخاصة بك ذهبت إلى جيريت (في هذا المثال، إلى https://gerrit.wikimedia.org/r/7187):
remote: Resolving deltas: 100% (4/4) remote: (W) 02f5e63: commit message lines >70 characters; manually wrap lines remote: remote: New Changes: remote: https://gerrit.wikimedia.org/r/7187 remote: To ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DonationInterface.git * [new branch] HEAD -> refs/for/master/mingle-fr-2012-69
تعديل التغييرات
في بعض الأحيان، قد تحتاج إلى تعديل تغيير مُرسل. يمكنك تعديل تغيير طالما لم يُدمج بعد.
يمكنك تعديل تغييراتك الخاصة. لتعديل التغييرات التي أرسلها شخص آخر، يجب أن تكون عضوًا في مجموعة المساهمين الموثوق بهم (Trusted-Contributors) في جيريت. لتصبح عضوًا في مجموعة المساهمين الموثوق بهم، ابحث عن شخص عضو واطلب منه إضافتك. تتوسع المجموعة بشكل سريع حيث يمكن للأعضاء إضافة أعضاء جدد، لذا استخدم صلاحياتك بمسؤولية.
لتعديل تغيير أجريته محليًا، انتقل أولًا إلى الفرع ذي الصلة:
git checkout branch-name
لتعديل تغيير خارجي، اجلب (checkout) التغيير مباشرة:
git review -d changeNumber
... حيث changeNumber هو الرقم اللاحق في عنوان URL لصفحة مراجعة الشيفرة الخاصة بك في جيريت.
بدلًا من ذلك، يقبل git review -d خيار Change-Id لجلب (checkout) تغيير.
أجرِ التغييرات وقم بـ git add لها حسب الحاجة. التزم (Commit) بالتغيير بصفته تعديلًا (amendment):
git commit --amend
ادفع التغيير:
git review
إعادة البناء (تحديث التصحيح ليشمل تغييرات أخرى)
في بعض الأحيان قد ترغب في تحديث التصحيح (patch) الخاص بك ليشمل جميع التغييرات التي حدثت في المستودع منذ إرسالك له. يُسمى هذا «rebasing» (إعادة البناء). لا توجد حاجة للقيام بذلك عادةً، إلا إذا استغرقت المراجعة وقتًا طويلًا وتريد التأكد من أن تغييراتك لا تزال تعمل مع أحدث إصدار من البرنامج، أو إذا أبلغ جيريت عن تعارض في الدمج (merge conflict) في تغييرك.
يمكنك القيام بذلك محليًا باستخدام الأمر git rebase بالخيارات الصحيحة، لكن واجهة الويب الخاصة بجيريت توفر طريقة أكثر ملاءمة للقيام بذلك.
في السيناريو الأبسط، ما عليك سوى النقر على «Rebase»، والاحتفاظ بالتحديد الافتراضي «Rebase on top of the master branch»، والنقر على «Rebase» مرة أخرى للتأكيد.
إذا كان التصحيح (patch) الخاص بك يحتوي على تعارض في الدمج، فسيظهر لك خطأ. يمكنك بعد ذلك تحديد خيار «Allow rebase with conflicts» والمحاولة مرة أخرى، مما سيعدل التصحيح الخاص بك ليضع علامات التعارض، على غرار تلك التي تُنشئها أوامر جيت. ستحتاج بعد ذلك إلى تعديله بنفسك، عبر تحرير الملفات يدويًا لحل التعارضات.
في بعض الأحيان قد ترغب أيضًا في تحديث التصحيح الخاص بك ليشمل تغييرات مقترحة في تصحيح آخر (إضافة اعتمادية على ذلك التصحيح)، ولكن لم تُدمج بعد. في هذه الحالة، حدد «Rebase on a specific change, ref, or commit» بدلًا من ذلك ووفر التغيير في حقل الإدخال.
إذا كان التصحيح الخاص بك يحتوي بالفعل على مثل هذه الاعتمادية، فستحصل أيضًا على خيار تحديد «Rebase on top of the master branch (breaks relation chain)» لإزالتها. ستحصل أيضًا على خيار تحديد «Rebase all ancestors»، والذي سيعيد بناء التصحيح مع الاعتمادية.
إذا كنت تستخدم الأمر git rebase، فمن الأفضل جعل تحديثات إعادة البناء (rebase) في تصحيح منفصل، حتى يسهل على مراجعي الشيفرة الخاصة بك رؤية التغييرات التي أجريتها والتغييرات التي حدثت في التصحيحات الأخرى.
استكشاف الأخطاء وإصلاحها
للتعرف على المشاكل وكيفية حلها، انظر Gerrit/Troubleshooting.
انظر أيضًا
هذه الصفحات مفيدة أيضًا:
Third party guides to Git
- Video tutorials how to use Git (on Wikimedia Commons)
- Try Git (interactive demo)
- GitMagic A git guide with translations
- Git's website with documentation
- Another useful OpenStack Git guide (if you subtract away GitHub stuff)
- Understanding the Git Workflow by Benjamin Sandofsky
- Using Git in Eclipse