كيف أرسل تصحيحًا إلى مطور آخر وأتجنب تعارضات الدمج؟

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

سؤال

كيف يمكنني الحصول على تصحيح من الالتزام لإرساله إلى مطور آخر؟وما هي أفضل طريقة لتجنب تعارض الدمج مع هذا التصحيح عند دمج أشجارنا في وقت لاحق؟

إذا كنت تعرف كيف، فيرجى توضيح كيفية القيام بذلك في VCS الذي تختاره مثل Subversion أو git أو Mercurial أو bzr أو ما إلى ذلك.

هل كانت مفيدة؟

المحلول

في شخص سخيف يمكنك توجيه إخراج git-diff بين ارتكابين مثل هذا:

git diff fa1afe1 deadbeef > patch.diff

ارسل patch.diff للمطور والسماح له git-apply إلى مساحة العمل الخاصة به مثل هذا:

git apply patch.diff

إذا كان المطور الآخر لديه بالفعل التزامات متاحة في مستودعه، فيمكنه دائمًا إرسالها إلى نفسه دون دمجها بهذه الطريقة:

git apply < git diff fa1afe1 deadbeef

يمكنك بعد ذلك يضيف و يقترف التغييرات في الفرق بالطريقة المعتادة.


الآن يأتي الجزء المثير للاهتمام عندما يتعين عليك دمج التصحيح مرة أخرى في الفرع الرئيسي (العام).خذ بعين الاعتبار شجرة المراجعة التالية حيث C* هو التصحيح المطبق من C في الفرع الرئيسي :

A---B---C---D          master, public/master
     \
      E---C*---F       feature_foo

يمكنك استخدام git-rebase لتحديث فرع الموضوع (في هذا المثال المسمى feature_foo) برأسه المنبع.ما يعنيه ذلك هو عندما تكتب ما يلي:

git rebase master feature_foo

سيعيد Git ترتيب شجرة المراجعة بهذا الشكل وسيطبق التصحيح نفسه أيضًا:

A---B---C---D          master, public/master
             \
              E*---F*  feature_foo

سيكون الدمج في الفرع الرئيسي الآن عملية دمج سريعة وسهلة.تحقق أيضًا من الالتزامات الجديدة E* و F* العمل كالسابق E و F على التوالى.

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

يرجى ملاحظة أن لا تقم أبدًا بإعادة إنشاء فرع عام لأن الأمر سيعيد كتابة سجل git وهو أمر لا تريد القيام به على الفروع التي يعتمد عليها الأشخاص وسيؤدي إلى حدوث فوضى عند الدمج في المستودعات البعيدة.كما لا تنسى أبدًا ذلك دمج في كثير من الأحيان حتى يتمكن الآخرون في فريقك من المشاركة في تغييراتك.

نصائح أخرى

في SVN يمكنك ببساطة جعل التغييرات ثم قبل يرتكب، أنبوب إخراج فرق إس إلى ملف على هذا النحو

svn diff > mypatch.diff

وبعد ذلك يمكنك العودة التغييرات وتطبيق التصحيح في وقت لاحق باستخدام

patch -p0 -i mypatch.diff

وكما هو الحال دائما لا عمياء تطبيق تصحيحات إلى رمز ودائما تفتيشها أولا.

وأنت قد تجد أيضا أن التصحيح سوف كسر شفرة المصدر الخاصة بك إذا تغيرت الملفات المصدر بما فيه الكفاية إلى حد كبير منذ أن تم أخذ التصحيح.

وأنت أيضا لا يمكن أن يضمن أن لن يكون هناك دمج الصراعات عند محاولة للتحقق في التعليمات البرمجية.

وBZR يعالج إرسال "دمج التوجيه"، وهذا يعني أنه يرسل التصحيح لك حتى أن الطرف الآخر يمكن ببساطة انقر فوق "موافق" لعلى دمج وهناك أقل futzing حولها مع التصحيح / تطبيق الخ

وفقط:  $ BZR إرسال -o mycode.patch

في التخريب لا توجد وسيلة لطيفة للقيام بذلك. نعم، يمكنك استخدام إس فرق + التصحيح ولكن هذا لن يؤجل فقط المشاكل الخاصة بك حتى وأنت تسير لدمج وبعد ذلك هناك احتمالات أن كنت قد نسيت عن ذلك.

والطريقة التي سوف نفعل ذلك في التخريب سيكون لإنشاء فرع، لا على ارتكاب على فرع ويطلب من المستفيد من التصحيح للتبديل إلى فرع. ثم يمكنك دمج فرع إلى الجذع بالطريقة المعتادة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top