ما هي أسهل طريقة ارتكاب دفع ملف واحد مع ترك تعديلات أخرى وحدها ؟

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

سؤال

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

كيف يمكنني الالتزام و ادفع ملف واحد إلى مستودع آخر في حين ترك تعديلات أخرى في دليل العمل غير ملتزم (أو على الأقل ليس دفعت إلى أخرى مستودع)?

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

في التخريب, كنت ببساطة:

svn add my_migration.sql  
# commit only the migration, but not the other files I'm working on
svn commit -m "migration notes" my_mygration.sql

ومواصلة العمل محليا.

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

أسهل شيء يمكنني معرفة ارتكاب الملف إلى مستودع استنساخ بلدي المحلية مستودع, جلب أي تغييرات جديدة من الفعلية مستودع ، ودمجها وارتكاب أن دمج و منهم دفع بلدي التغييرات.

hg add my_migration.sql 
hg commit -m "migration notes" my_migration.sql 
cd ..
hg clone project project-clone
cd project-clone
hg fetch http://hg/project
hg push  http://hg/project

يعمل هذا ، ولكن بدا الامر وكأننا أنا في عداد المفقودين شيء أسهل طريقة لإخبار الزئبقي تجاهل الملفات في دليل العمل, مجرد دمج و إرسال الملفات جنبا إلى جنب.وأظن الزئبقي طوابير يمكن أن تفعل هذا ، ولكن لا بشكل كامل جروك mq بعد.

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

المحلول

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

ثم يمكنك hg shelve و hg unshelve مؤقتا لتخزين التغييرات بعيدا.فإنه يتيح لك العمل في "التصحيح كتلة" مستوى انتقاء واختيار العناصر إلى الرف بعيدا.لم تظهر إلى تأجيل ملف قد سرد مضيفا أن الملفات بالفعل في الريبو مع بعض التعديلات.

يتم تضمين مع الزئبقي باعتبارها "التمديد" الذي يعني فقط لديك لتمكينه في الزئبق config.


ملاحظات حقا الإصدارات القديمة من الزئبقي (قبل تأجيل أدرج -- هذا لم يعد ضروريا):

أنا لم أرى أي تعليمات التثبيت مع بعض غوغلينغ, حتى هنا هو الجمع بين الأشياء التي اعتدت على هذا العمل:

الحصول عليه مع:

hg clone http://freehg.org/u/tksoh/hgshelve/ hgshelve

الملف فقط (حاليا) في المشروع hgshelve.py الملف.

تعديل ~/.hgrc لإضافة تأجيل التمديد ، لافتا إلى حيث كنت المستنسخة الريبو:

[extensions] 
hgshelve=/Users/ted/Documents/workspace/hgshelve/hgshelve.py

نصائح أخرى

لقد كان ما يقرب من 2 سنوات منذ أنا أصلا طرح هذا السؤال.أود أن تفعل ذلك بطريقة مختلفة الآن (كما ذكرت في التعليق أعلاه السؤال أعلاه).ماذا أفعل الآن سيكون بدلا ارتكاب بلدي التغييرات إلى ملف واحد في بلدي المحلية الريبو (يمكنك استخدام الزئبق سجل التمديد فقط ارتكاب قطعة من الملف):

hg commit -m "commit message" filename

ثم طرد.

hg push

إذا كان هناك تعارض لأن آخر التغييرات التي طرأت على الريبو أنني بحاجة إلى دمج أفضل تحديث الوالدين مراجعة (شهدت مع "hg الآباء -r ." إذا كنت لا تعرف ما هو عليه) ، ارتكاب بلدي تغييرات أخرى هناك حتى لقد حصلت على 2 رؤساء.ثم العودة إلى الأصل ملف واحد ارتكاب سحب/دمج التغييرات في هذا الإصدار.ثم دفع من التغييرات مع

hg push --rev .

دفع بها سوى ملف واحد و دمج تلك المراجعة.ثم يمكنك دمج اثنين من رؤساء لديك محليا.

وبهذه الطريقة يتخلص من mq الأشياء و إمكانية رفض الكتل و يبقى كل شيء تتبعها عنصر تحكم مصدر.يمكنك أيضا "hg قطاع" التنقيحات قبالة إذا كنت في وقت لاحق تقرر أنك لا تريد لهم.

tl;dr:بلدي الأصلي تفسير تبدو معقدة لكن أتمنى أن كامل يشرح كيفية استخدام التصحيح الانتظار.هنا هو نسخة قصيرة:

$ hg qnew -m "migration notes" -f migration my_migration.sql
$ hg qnew -f working-code
# make some changes to your code
$ hg qrefresh # update the patch with the changes you just made
$ hg qfinish -a # turn all the applied patches into normal hg commits

الزئبقي طوابير يجعل هذا النوع من الشيء نسيم ، ويجعل أكثر تعقيدا التلاعب changesets ممكن.يستحق التعلم.

في هذه الحالة ربما كنت ترغب في حفظ ما في الدليل الحالي قبل إنزال التغييرات:

# create a patch called migration containing your migration
$ hg qnew -m "migration notes" -f migration.patch my_migration.sql
$ hg qseries -v # the current state of the patch queue, A means applied
0 A migration.patch
$ hg qnew -f working-code.patch # put the rest of the code in a patch
$ hg qseries -v
0 A migration.patch
1 A working-code.patch

الآن دعونا نفعل بعض الأعمال الإضافية على العامل التعليمات البرمجية.انا ذاهب للحفاظ على القيام qseries فقط أن تكون صريحة ، ولكن مرة واحدة يمكنك بناء العقلية نموذج التصحيح طوابير, لن يكون لديك للحفاظ على النظر في قائمة.

$ hg qtop # show the patch we're currently editing
working-code.patch
$ ...hack, hack, hack...
$ hg diff # show the changes that have not been incorporated into the patch
blah, blah
$ hg qrefresh # update the patch with the changes you just made
$ hg qdiff # show the top patch's diff

لأن كل ما تبذلونه من العمل يتم حفظها في التصحيح طابور الآن يمكنك unapply تلك التغييرات واستعادتها بعد أن كنت قد سحبت في جهاز التحكم عن بعد التغييرات.عادة unapply كل بقع, فقط افعل hg qpop -a.فقط لإظهار تأثير على التصحيح الانتظار سوف البوب لهم قبالة واحد في وقت واحد.

$ hg qpop # unapply the top patch, U means unapplied
$ hg qseries -v
0 A migration.patch
1 U working-code.patch
$ hg qtop
migration.patch
$ hg qpop
$ hg qseries -v
0 U migration.patch
1 U working-code.patch

في هذه المرحلة, كما لو كان هناك أي تغييرات في الدليل الخاص بك.لا hg fetch.الآن يمكنك دفع التصحيح الخاص بك الانتظار التغييرات مرة أخرى ، ودمجها إذا كان هناك أي تضارب.هذا هو المفهوم تشبه إلى حد ما حكاية ريبس.

$ hg qpush # put the first patch back on
$ hg qseries -v
0 A migration.patch
1 U working-code.patch
$ hg qfinish -a # turn all the applied patches into normal hg commits
$ hg qseries -v
0 U working-code.patch
$ hg out
migration.patch commit info... blah, blah
$ hg push # push out your changes

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

$ hg qpush
$ hg qseries -v
0 A working-code.patch
$ hg export qtip > temp.diff
$ rm -r .hg/patches # get rid of mq from the repository entirely
$ hg import --no-commit temp.diff # apply the changes to the working directory
$ rm temp.diff

أنا المدمنين بشكل كبير إلى التصحيح طوابير من أجل التنمية ، mq هو واحد من اجمل تطبيقات هناك.القدرة على صياغة العديد من التغييرات في وقت واحد حقا لا يحسن كيف تركز وتنظيف يرتكب هي.يستغرق بعض الوقت لتعتاد على ، ولكن سارت الامور بشكل جيد بشكل لا يصدق مع DVCS سير العمل.

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

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

ما يمكنني استخدام عموما هو استخدام ارتكاب ملف واحد :

 hg commit -m "commit message" filename

في القضية في وقت لاحق ، يجب دمج الصراع وأنا لا تزال غير مستعدة لارتكاب بلدي التغييرات اتبع الخطوات التالية:

1) إنشاء ملف التصحيح.

hg diff > changes.patch

2) تعود كل المعلقة الخاصة بك غير ملتزم التغييرات إلا بعد التحقق من ملف patch.

hg revert --all

3) سحب وتحديث دمج أحدث مراجعة

hg pull -u
hg merge
hg commit -m "local merge"

4) الآن ببساطة استيراد التصحيح الخاص بك على التغييرات.

hg import --no-commit changes.patch

تذكر أن استخدام -لا-ارتكاب العلم من السيارات ارتكاب التغييرات.

منذ أن قلت أسهل, أنا غالبا ما تستخدم hg commit -i (- التفاعلية) حتى عند ارتكاب كل الملفات.مع --interactive يمكنك فقط اختيار ملف(ق) التي تريد بدلا من كتابة المسار بالكامل(s) على سطر الأوامر.اضاف باعتبارها مكافأة حتى يمكنك بشكل انتقائي تشمل/استبعاد قطع داخل الملفات.

وبعد ذلك فقط hg push لدفع تلك التي تم إنشاؤها حديثا يرتكبها.

أضع المزيد من التفاصيل حول استخدام hg commit --interactive في هذا الجواب: https://stackoverflow.com/a/47931672/255961

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