كيف يمكن الاحتفاظ بالتغييرات غير الملتزم بها في مستودع زئبقي محلي، مع الاستمرار في الدفع/السحب؟

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

  •  29-10-2019
  •  | 
  •  

سؤال

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

ماذا يفعل الآخرون للالتفاف حول هذا؟أجد الوثائق الخاصة بامتداد الرفوف صعبة الفهم.

ملحوظة:أنا أستخدم Mercurial Eclipse لدفع الملفات وسحبها من/إلى الخادم.

أي تفسير لهذا سيكون موضع تقدير كبير!شكرًا!


مثال:

أنا أعمل على موقع الويب الخاص بي في Mercurial Eclipse.لدي مجلد جديد وملفات جديدة لا أريد أن أضعها على الخادم حتى الآن.لقد قمت أيضًا بتعديل بعض الملفات الموجودة ولا أريد نشر هذه التغييرات حتى الآن.

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

ماذا علي أن أفعل بالمجلد الجديد والملفات التي قمت بتحريرها إذا كنت لا أريد أن أفقدها؟إعادة الاستنساخ تبدو مملة.يبدو نسخ الملفات إلى مجلد جديد أمرًا مملاً أيضًا.أنا متأكد من أن Shelving أو MQ سيفعلان ما أريد، لكني لا أعرف كيفية القيام بذلك بعد.

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

المحلول

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

نصائح أخرى

بالإشارة إلى مثال الموقف الخاص بك، إليك ما سأفعله (باتباع استراتيجية Ry4an للالتزام فقط بالأشياء التي تعمل عليها حاليًا، ولكن لا ترغب في النشر بالفعل):

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

$ hg status -A
C f1
C f2
$ hg glog
@  changeset:   1:7f3c6c86a92f
|  tag:         tip
|  summary:     add f2
|
o  changeset:   0:03ca1e6d5b86
   summary:     initial

أي أن هناك ملفين ومجموعتي التزام/تغيير.إذا قمت ببعض الأعمال، فلنفترض إضافة ميزة جديدة، ومن ثم قد تبدو نسخة العمل الخاصة بك كما يلي:

$ hg status
M f2
? f3
? f4

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

$ hg commit -A -m "snapshot feature work"
$ hg pull

قد يؤدي هذا إلى تاريخ مثل هذا:

o  changeset:   3:2284ba62de07            <-- just pulled in
|  tag:         tip
|  parent:      1:7f3c6c86a92f
|  summary:     edit f1
|
| @  changeset:   2:4a19d371a04f          <-- your interrupted work
|/   summary:     snapshot feature work
|
o  changeset:   1:7f3c6c86a92f
|  summary:     add f2
|
o  changeset:   0:03ca1e6d5b86
   summary:     initial

يمكنك الآن التحديث إلى/الخروج من المراجعة 3 والبدء في إصلاح الأخطاء:

$ hg update 3
.. fix the bug ..
$ hg commit -m "fix a bug"
$ hg glog --limit 3
@  changeset:   4:5d3d947fb4af
|  tag:         tip
|  summary:     fix a bug
|
o  changeset:   3:2284ba62de07
|  parent:      1:7f3c6c86a92f
|  summary:     edit f1
|
| o  changeset:   2:4a19d371a04f
|/   summary:     snapshot feature work
:

يبدو جيدًا، دعنا ندفع الإصلاح الخاص بك، على سبيل المثال.اجعله مباشرًا، مع عدم نشر عملك الوسيط:

$ hg push -r 4

يؤدي هذا إلى دفع كافة التغييرات التي تؤدي إلى المراجعة 4، إصلاح الأخطاء، ولكن لا توجد فروع أخرى في مستودعك المحلي.يمكنك أيضًا استخدام -r ., ، والذي يشير إلى المراجعة الأصلية لنسخة العمل الخاصة بك، أي.المراجعة التي ارتكبتها للتو.

أخيرًا، يمكنك العودة إلى عملك المميز ومواصلة عملك:

$ hg update 2
.. work, commit, work, commit ..
.. finally merge with the other branch, e.g. revision 4

توجد هذه الخطوات في سطر الأوامر، ولكن أعتقد أنه ليس من الصعب تكييف المفهوم العام مع النقرات المقابلة في البرنامج الإضافي Eclipse Mercurial.

بعض الملاحظات الإضافية:

  • قد ترغب في إشارة مرجعية التزام اللقطة الخاص بك، لذلك لا تحتاج إلى العمل مع معرفات المراجعة أو الأرقام.
  • إذا كنت تريد نشر عملك المميز في التزام واحد لاحقًا، فاستخدم ينهار التمديد بمجرد الانتهاء من ذلك.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top