كيف تندمج التغييرات على الفروع غير الماجستير من مستودع GitHub متشعب؟

StackOverflow https://stackoverflow.com/questions/2014914

  •  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

الفرق الرئيسي بين شوكة الجيت، عند مقارنته إما استنساخ بسيطة جيت، أو الخروج SVN، هو أن شوكة الخاص بك لن تبقي نفسه مطلقا حتى الآن مع الريبو الرئيسي إلا إذا قمت بذلك. لحسن الحظ، هناك أداة بسيطة لمساعدتك في القيام بذلك. شوكة الخاص بك منفصلة ومتساوية للماجستير في مصطلحات GIT، لذلك إذا كنت ترغب في تتبع التغييرات في Master، فيمكنك إنشاء فرع تتبع في Repo الشوكي ودمج تلك التغييرات في فرع ماجستير الشوك الخاص بك كلما أردت ارتكاب شيء ما. أوصي بشدة GEM "Github" وهي أداة يمكنك تثبيتها لمساعدتك بسهولة في تتبع التغييرات في أي مستودع آخر يتعلق بك. راجع نص README في أسفل هذه الصفحة للتثبيت والاستخدام: http://github.com/defunkt/github-gem/tree/master.

تجاهل قائمة انتظار شوكة جيثب إنه شرير! قائمة انتظار الشوكة هي أداة للمشرفين الذين يحبون اختيار ارتكاب واحد من المساهمين ولكنهم لا يرغبون في الاندماج في فرعهم كله. إذا كنت تلعب مع قائمة انتظار الشوكة، فسوف تفسد شوكة الخاص بك (يمكن إصلاحها رغم ذلك، وقراءة خطأ ما). يشعر العديد من المبتدئين على جيثب على جيثب وكأنهم ينبغي أن يفعلوا شيئا مع قائمة انتظار الشوكة لأن هناك الكثير من التغييرات المتضاربة هناك ولا يعرفون ما هي الطريقة المفترضة للحفاظ على شوكة واحدة محدثة. اقرأ الحفاظ على شوكة الخاص بك حتى الآن واكتشف!

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top