كيف تندمج التغييرات على الفروع غير الماجستير من مستودع GitHub متشعب؟
-
19-09-2019 - |
سؤال
في كل من أسئلة Stackoverflow التالية، تصف الإجابة المقبولة كيفية دمج التغييرات من مستودع متشعب في الموقف حيث شوكة ريبو، يتم تعديل الريبو الأصلي، ثم ترغب في دمج التغييرات التي تم إجراؤها على فرع السيد ريبو الشوق الخاص بك.
ومع ذلك، أنا لست واضحا حول كيفية مواكبة الفروع غير الماجستير في الريبو الأصلي الذي كنت متهرب. على سبيل المثال، عندما تهرب في الأصل مستودع النسيج bitprophet, ، احتوي الفروع التالية:
- رئيس
- 0.9
- 0.9-Doc-rewrite (لم يعد موجودا)
- المسار و- # 24 (لم يعد موجودا)
آخر الفروع لم تعد موجودة، والآن هناك فرع جديد flexible-task-declarations
. وبعد لقد جلبت، دمجت، ودفعت فرع Master، بحيث يكون لدى ماجستير أو أصل / ماجستير / ماجستير، و Epstream / Master كلها نفس التجزئة SHA1 وأشر إلى نفس لقطة GIT Snaphot. ومع ذلك، لست متأكدا من كيفية إزالة الفروع التي لم تعد موجودة وتحديث الفروع الجديدة بحيث تكون شوكة بلدي محدثة. هل أحتاج إلى تتبع كل فرع من فرع المنبع ثم جلب، دمج، ودفع كل فرع فروع بشكل فردي، أم أن هناك طريقة أفضل؟
المحلول
السيناريو 1: حذف الفروع التي لم تعد موجودة
لحذف الفروع التي لم تعد موجودة، تابعت التعليمات في إجابة سؤال Stackoverflow كيف يمكنني حذف فرع git على حد سواء محليا وفي جيثب؟ عن طريق إصدار الأوامر التالية:
$ git push origin :0.9-doc-rewrite
$ git push origin :path-and-#24
السيناريو 2: دمج التغييرات في فرع غير ماستر موجود
للحصول على APSTREAM / 0.9 Branch حتى الآن، فعلت ما يلي:
$ git checkout --track origin/0.9
$ git fetch upstream
$ git merge upstream/0.9
$ git push
السيناريو 3: تتبع الفروع غير الماجستير الجديدة
لست متأكدا من أن هذه هي أفضل طريقة للتعامل معها، لكن إليك ما فعلته:
$ git branch flexible-task-declarations upstream/flexible-task-declarations
Branch flexible-task-declarations set up to track remote branch flexible-task-declarations from upstream.
$ git checkout flexible-task-declarations
$ git push origin flexible-task-declarations
للتأكد من أن جميع الفروع هي في نفس الالتزام:
$ git branch -av
سيؤدي ذلك إلى إظهار جميع الفروع - المحلية والبعيدة - وإظهار أحدث رسائل الالتزام و Sha1 Hash.
بحث الويب الذي قد يلقي الضوء على طريقة أفضل للسيناريو 3
- GitHub دليل: الحفاظ على شوكة الجيت في المزامنة مع الريبو المتشابك - يوفر اختصارا إلى Octo Merge من أصل ريبو المنبع في نفس الوقت، ولكن لا يصف الخطوة الأولية للحصول على الفرع الموجود في الإعداد المنبع ولكن ليس من أصل محلي
- استخدم وحافظ على تيار شوكة الخاص بك مع مستودع GIT الرئيسي من مطور XMPP4R التعليمات
الفرق الرئيسي بين شوكة الجيت، عند مقارنته إما استنساخ بسيطة جيت، أو الخروج SVN، هو أن شوكة الخاص بك لن تبقي نفسه مطلقا حتى الآن مع الريبو الرئيسي إلا إذا قمت بذلك. لحسن الحظ، هناك أداة بسيطة لمساعدتك في القيام بذلك. شوكة الخاص بك منفصلة ومتساوية للماجستير في مصطلحات GIT، لذلك إذا كنت ترغب في تتبع التغييرات في Master، فيمكنك إنشاء فرع تتبع في Repo الشوكي ودمج تلك التغييرات في فرع ماجستير الشوك الخاص بك كلما أردت ارتكاب شيء ما. أوصي بشدة GEM "Github" وهي أداة يمكنك تثبيتها لمساعدتك بسهولة في تتبع التغييرات في أي مستودع آخر يتعلق بك. راجع نص README في أسفل هذه الصفحة للتثبيت والاستخدام: http://github.com/defunkt/github-gem/tree/master.
- سير عمل جيثب التعاونية من Eqqon (مقال جيد عن سير العمل GitHub):
تجاهل قائمة انتظار شوكة جيثب إنه شرير! قائمة انتظار الشوكة هي أداة للمشرفين الذين يحبون اختيار ارتكاب واحد من المساهمين ولكنهم لا يرغبون في الاندماج في فرعهم كله. إذا كنت تلعب مع قائمة انتظار الشوكة، فسوف تفسد شوكة الخاص بك (يمكن إصلاحها رغم ذلك، وقراءة خطأ ما). يشعر العديد من المبتدئين على جيثب على جيثب وكأنهم ينبغي أن يفعلوا شيئا مع قائمة انتظار الشوكة لأن هناك الكثير من التغييرات المتضاربة هناك ولا يعرفون ما هي الطريقة المفترضة للحفاظ على شوكة واحدة محدثة. اقرأ الحفاظ على شوكة الخاص بك حتى الآن واكتشف!
Django سير العمل جيثب
يحتوي مشروع Django على تعليمات حول كيفية التعاون في جيثب الذي يستخدم ما يبدو أن الطريقة القياسية للتعامل مع التغيرات والسحب في المنبع.
تكوين شوكة أولية مختلفة
بنواب طويلة بنوينز إعداد مستودعات GIT الخاصة بك لمشاريع مفتوحة المصدر في جيثب على مدونة Michael Hartl تصف طريقة مثيرة للاهتمام لإعداد مستودع GitHub الذي كنت قد مضى. أهداف هذه الطريقة وفقا للمادة هي:
- الحفاظ على المستودعات في المزامنة بحيث يحتوي كل منها على مستودع "الرسمي" الكامل
- اسمح للمطورين بسحب التحديثات الرسمية
- تشجيع العمل على فروع أخرى غير الماجستير
نصائح أخرى
في الأساس، لديك 3 repo repo عن بعد النظر:
- محلي: ريبو جيت الحالي على محطة العمل الخاصة بك.
- الأصل: ما هو نسخة ممتدة من النسيج: cumulusware.
- upstream: bitprophet / النسيج, ، واحد عند أصل جميع ريبو الشوق الآخر
يمكنك إضافة المنبع كإعادة ريبو عن بعد إلى محلي.
git remote add upstream http://github.com/bitprophet/fabric.git
انظر إلى الفروع البعيدة
git branch -r
والدفع (حذف) تلك الموجودة في الأصل ولكن لم تعد موجودة في المنبع
git push origin :anOldBranch
ثم
git remote prune origin
لمسح الفروع على ريبو المحلي الخاص بك (والتي لم تعد موجودة في الأصل، لأنك لحذفها فقط)
يجب مزامنة الفروع الموجودة في المنشأ والمنوع المنبع أيضا (إعادة صياغة فروعك المحلية على رأس أولئك من المنبع قبل دفع عملك إلى الأصل وسيلة جيدة لجعل طلب سحب سهل للغاية إلى المنبع: BitProphet لن يحدث فقط لديك دمج سريع إلى الأمام للقيام بتشمل عملك)
لا أعرف إذا كان بإمكانك الحصول على عملية / قيادة / سيناريو أكثر بسيطة لمزامنة مستودعين بعيدين.
جئت عبر هذه الإجابة أثناء البحث عن كيفية القيام بالسيناريو 3 في الإجابة المقبولة بشكل نظيف. بعد بعض الحفر حولها، مع GIT 1.8 يمكنك القيام بما يلي:
git fetch upstream ;make sure you have all the upstream changes
git checkout --no-track upstream/0.9 ;grab the new branch but don't track it
git branch --set-upstream-to=origin/0.9 ;set the upstream repository to your origin
git push ;push your new branch up to origin