زئبقي:دمج ملف واحد بين الفروع في ريبو واحد
-
21-08-2019 - |
سؤال
عندما يكون لدي فرعين في 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 =