سؤال

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

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

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

المحلول

MQ كما ذكرت تشاد هي طريقة واحدة.هناك أيضًا المزيد من الحلول خفيفة الوزن:

  • تمديد السجل والذي يعمل تقريبًا بنفس طريقة تسجيل darcs.يتم توزيعه بالزئبق.
  • تمديد الرف والذي يسمح لك "بتأجيل" بعض التغييرات، مما يسمح لك بتنفيذ مجموعة فرعية فقط من تغييراتك (تلك التي لم يتم وضعها على الرف)

نصائح أخرى

إذا كنت تستخدم السلحفاة زئبق 1.x للنوافذ، يتم تنفيذ هذه الميزة بشكل جميل مباشرة من خارج منطقة الجزاء (لا توجد ملحقات مطلوبة).

  1. قم بتشغيل أداة الالتزام TortoiseHg.
  2. اختر ملفًا لا تريد سوى ارتكاب مجموعة فرعية من تغييراته.
  3. انقر فوق علامة التبويب اختيار قطعة كبيرة في جزء المعاينة.
  4. انقر نقرًا مزدوجًا فوق أو استخدم المسافة لتبديل أي تغيير يجب أن يتم تضمينه في الالتزام.

ل السلحفاة زئبق 2.x, ، اختفت الآن علامة التبويب "تحديد قطعة كبيرة".وفي مكانه هو أداة الرف.لديها عدد قليل من الميزات أكثر من اختيار قطعة كبيرة القديمة.تأتي هذه الميزات الجديدة على حساب بعض التعقيد الإضافي.

enter image description here

لاحظ أنه ليست هناك حاجة لتمكين ملحق Mercurial Shelve بشكل صريح عند استخدام هذه الميزة.وفقًا لستيف بورهو (مطور TortoiseHg الرئيسي) في ردًا على سؤال TortoiseHg مختلف: "لدينا نسخة محلية من ملحق الرف ونتصل به مباشرةً."


ل السلحفاة زئبق 2.7+, ، تم تحسين هذه الوظيفة وإعادة تقديمها.لقد تم دمجه الآن مباشرةً في أداة الالتزام:

example of change selection in the commit tool

لاحظ في قائمة الملفات الموجودة على اليسار أنه تم تحديد الملف العلوي للإشارة إلى أنه سيتم تضمينه، ولم يتم تحديد الملف الثاني لأنه لن يتم تضمينه، وتم ملء الملف الثالث، Sample.txt (مؤشر خانة الاختيار Null) لأنه سيتم تضمين التغييرات المحددة فقط من هذا الملف في الالتزام.

يتم تحديد التغيير الذي سيتم تضمينه في Sample.txt في جزء تحديد التغيير الأيمن السفلي من الصورة.يتم إلغاء تحديد التغيير الذي سيتم استبعاده ويصبح عرض الاختلاف باللون الرمادي.لاحظ أيضًا أن رمز أداة الرف لا يزال متاحًا بسهولة.

يعد البرنامج التعليمي Mercurial Queues سيئًا بالنسبة لحالة الاستخدام هذه.تفترض جميع الأمثلة التي رأيتها أنك لم تلتزم بعد وأنك تقوم بتحديث تصحيح واحد.في معظم الأحيان لا يكون هذا هو الحال، ولديك التزامان أو ثلاثة التزامات تريد سحقها معًا أو تغييرها بطريقة أخرى.

لنفترض أن لديك هذا النوع من التاريخ:

---O---O---A---B---C

المثال الأول هو تنفيذ عمليات الاسكواش A وB وC.الحرف الأول الأول mq:

$ hg qinit

نحتاج الآن إلى "استيراد" الالتزامات A وB وC إلى قائمة انتظار التصحيح.لنفترض أنها آخر 3 التزامات.يمكننا استخدام صيغة المراجعة "-N" لاستيرادها كما يلي:

$ hg qimport -r -3:-1

وهذا يعني الاستيراد كتصحيحات من 3 تصحيحات احتياطيًا حتى الالتزام الأخير.يمكنك التحقق من حالة هذه التصحيحات باستخدام hg qseries.يجب أن يظهر شيء مثل هذا:

$ hg qseries
101.diff
102.diff
103.diff

حيث تتوافق الأرقام 101 و102 و103 مع أرقام المراجعة المحلية للالتزامات A وB وC.الآن هذه البقع مُطبَّق, مما يعني أن التغييرات التي يصفونها موجودة بالفعل في نسخة العمل.يمكنك التخلص من تغييرات نسخة العمل وإزالتها من سجل الالتزامات، وحفظها في نموذج التصحيح فقط، باستخدام hg qpop.يمكنك إما أن تقول hg qpop; hg qpop لإخراج التغييرات C وB من المكدس، أو تحديد تصحيح "للإنتقال إليه".في هذه الحالة، سيكون الأمر كالتالي:

$ hg qpop 101.diff
now at: 101.diff

لديك الآن تصحيحات للالتزامات B وC في قائمة انتظار التصحيح، لكن لم يتم تطبيقها (تم "فقدان" تغييراتها - فهي موجودة فقط في منطقة قائمة انتظار التصحيح).الآن يمكنك طي هذه التصحيحات في التصحيح الأخير، أي.نقوم بإنشاء التزام جديد يعادل مجموع التغييرات A+B+C.

$ hg qfold -e 102.diff 103.diff

سيُظهر هذا المحرر الخاص بك حتى تتمكن من تغيير رسالة الالتزام.افتراضيًا، ستكون الرسالة عبارة عن سلسلة من رسائل الالتزام للتغييرات A وB وC، مفصولة بعلامات نجمية.الشيء الجميل هنا هو ذلك hg qfold سوف تقوم بإكمال التصحيحات بعلامة تبويب إذا كنت تستخدم bash ولديك مصدر البرنامج النصي hg-completion.هذا يترك التاريخ على هذا النحو، حيث A+B+C عبارة عن التزام واحد عبارة عن مزيج من التصحيحات الثلاثة التي تهمنا:

---O---O---A+B+C

حالة استخدام أخرى هي إذا كان لدينا نفس النوع من السجل كما كان من قبل، ولكننا نريد إسقاط التصحيح B ودمج A+C.هذا مشابه جدًا لما ورد أعلاه في الواقع.عندما تصل إلى خطوة qfold، يمكنك ببساطة طي الالتزام الأخير بدلاً من الالتزامين الأخيرين:

$ hg qfold -e 103.diff

يؤدي هذا إلى ترك التغيير لـ B في قائمة انتظار التصحيح، ولكن لا يتم تطبيقه على نسخة العمل ولا يتم حفظ التزامه في السجل.يمكنك رؤية ذلك عن طريق تشغيل:

$ hg qunapplied
102.diff

يبدو السجل الآن هكذا، حيث A+C عبارة عن التزام واحد يجمع بين التغييرات A وC:

---O---O---A+C

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

$ hg qpop -a

العلم -a يعني إزالة كافة التصحيحات.الآن يمكنك تطبيق ما تريده فقط:

$ hg qpush 103.diff

ويترككم مع هذا التاريخ:

---O---O---C

بمجرد الانتهاء من كل هذا، تحتاج إلى إنهاء العبث في قائمة الانتظار.يمكن القيام بذلك باستخدام:

$ hg qfinish -a

إذن ها نحن ذا.يمكنك الآن الركض hg push والتزم فقط بما تريده بالضبط، أو hg email تصحيح متماسك إلى القائمة البريدية.

وأنا أشعر أنني في عداد المفقودين شيء لأن لا أحد قد اقترح هذا بالفعل.

ووضعها الطبيعي "الزئبق ارتكاب" يمكن استخدام الأمر للاختيار انتقائي ما لارتكاب (لم يكن لديك لارتكاب كل التغييرات المعلقة في دليل العمل المحلي).

إذا كان لديك مجموعة من التغييرات مثل ذلك:

M ext-web/docroot/WEB-INF/liferay-display.xml
M ext-web/docroot/WEB-INF/liferay-portlet-ext.xml
M ext-web/docroot/WEB-INF/portlet-ext.xml

ويمكنك ارتكاب اثنين فقط من هذه التغيرات مع ...

hg commit -m "partial commit of working dir changes" ext-web/docroot/WEB-INF/liferay-display.xml ext-web/docroot/WEB-INF/liferay-portlet-ext.xml

وليس مريحة فائقة من سطر الأوامر لأن لديك لباليد اكتب الملفات لارتكاب انتقائي (مقابل عملية خانة الاختيار واجهة المستخدم الرسومية مثل السلحفاة) ولكن حان مباشرة كما يحصل ويتطلب أي ملحقات. والملفات globbing ربما يمكن أن تساعد في الحد من الكتابة (كما لو أعلاه، كلا الملفين ملتزمة تبادل فريد "لايف راي" في اسم الدليل الخاصة بهم.

ويمكنك استخدام سجل تمديد ، التي يتم توزيعها مع زئبقي.

وتحتاج إلى تمكينه في ملف ~/.hgrc أولا، عن طريق إضافته إلى قسم [extensions]:

[extensions]
record=

وبعد ذلك، فقط اكتب hg record بدلا من hg commit، وسوف تكون قادرة على تحديد أي تغييرات على الملفات التي تريد ارتكاب.

ويمكنك أيضا استخدام crecord التي تمديد يوفر واجهة أجمل لاستعراض وحدد التغييرات. (لم يتم توزيعه مع زئبقي، رغم ذلك، ولقد رأيت ذلك في بعض الأحيان لخبط لارتكاب حتى انها ليست خالية تماما من الشوائب.)

لقد مرت بعض الوقت. يبدو الخيار الأفضل الآن hg commit --interactive

قوائم انتظار زئبقي يملأ هذا الدور للزئبقي. هناك تعليمي جيد جدا مرتبط هناك.

وحاول كيو سي تي (كيو تي الالتزام أداة). أنه يحتوي على "تحديد التغييرات" الميزة التي يبدأ العمل أداة دمج 3-طريقة لالتراجع عن التغييرات الفردية. بعد ارتكابها، تلك التغييرات التي "أفقرت" يعود.

ارتكاب التصحيح . انها النصي التي تمكنك من تحرير فرق قبل الالتزام. انها لطيف مع فرق الوضع والرأسمالي الوضع في ايماكس.

في الماضي كنت crecord، لكنها البق المتعلقة يونيكود (في الواقع التمديد سجل لديه البق، والذي يعتمد على crecord).

أولاً، يجب أن تنسى كل ما تعرفه عن واجهات المستخدم الرسومية وتعود إلى سطر الأوامر.التالي من سطر الأوامر قم بما يلي:

قانون الزئبق > filelist.txt

يؤدي هذا إلى توجيه جميع ملفاتك المعدلة إلى ملف نصي يسمى filelist.txt

قم بعد ذلك بتحرير قائمة الملفات الخاصة بك لتشمل فقط الملفات التي ترغب في الالتزام بها.

أخيرًا الالتزام باستخدام sytnax لمجموعة الملفات:

التزام زئبق "مجموعة:"ملف القائمة:test.txt""

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