سؤال

عندما يكون لدي فرعين في Hg repo، كيف يمكنني دمج ملف واحد فقط مع فرع آخر، دون دمج جميع الملفات الأخرى من مجموعة التغييرات؟

هل من الممكن دمج ملفات معينة فقط، بدلاً من مجموعة التغييرات بأكملها؟

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

المحلول

تحذير: هذا "دمج وهمية"، كما أوصت بهMartin_Geisler، يمكن حقا فوضى لكم، إذا كان لاحقا تريد القيام به دمج حقيقي للفرعين. سيتم تسجيل الدمج وهمية، ويقولون إن دمج في فرع فعلتم الدمج وهمية ل- فلن ترى التغييرات. أو إذا كنت الاندماج في الفرع الآخر، سيتم التراجع عن التغييرات على هذا الفرع الآخر.

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

   hg update -r to-branch
   hg revert -r from-branch file
   hg ci -m 'copied single file from from-branch to to-branch

إذا كنت تريد تحديد أجزاء مختلفة من هذا الملف، ثم "hg record" هو مفيد.

ولقد فعلت هذا في بلدي .hgignore الدليل الرئيسي.

وإذا كان كل من فروع وإجراء تغييرات على ملف الذي تريد الاحتفاظ بها، خدعة قذرة سيكون لإنشاء دمج فروع اثنين باستخدام دمج الزئبق، ربما / ربما على لا يزال فرع آخر، والتحقق من أنه في، ثم قم بنسخ ملف واحد بين الدمج وفرع إلى ل:

   hg update -r to-branch
   branch merge-branch
   hg merge -r from-branch
   hg ci -m 'temp merge to be discarded"
   hg update -r to-branch
   hg revert -r merge-branch single-file
   hg ci -m 'merged single-file from from-branch to to-branch"
   hg strip merge-branch

والجدير بالذكر: الطريق إلى "نسخ ملف واحد بين الفروع" (أو مراجعات أو من تنقيح للدمج، أو ....) هو "تعود الزئبق". أي بمعنى.

   hg update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

لسبب ما، وبعض من زملائي، والعثور على هذا <م> VERY مربكة. "العودة" == "نسخة" ... من المنطقي لبعض أنماط الاستخدام، ولكن ليس كل شيء.

نصائح أخرى

لا.يعمل Mercurial على أساس مجموعة التغييرات.

ولكن يمكنك القيام "دمج وهمي"حيث تتجاهل التغييرات الواردة من أحد الفروع.قبل الالتزام، يمكنك إرجاع الملفات المحددة إلى الحالة التي تريدها:

% HGMERGE=internal:local hg merge     # keep my files
% hg revert --rev other-branch a.txt  # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'

ربما هذا سوف يساعدك قليلا

وأود أن مجرد استخدام أداة خارجية مثل vimdiff لمهرجان دبي السينمائي الدولي الملفين التي أريد أن دمج ثم دمجها. وميزة هذا هو أنه يمكنك القيام التحرير الانتقائي على أجزاء من ملف. منها مثلا:

hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging

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

[extensions]
hgext.extdiff =  
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top