كيف يمكنني تغيير وقت الالتزام (غير مدفوع بعد)؟
-
06-09-2019 - |
سؤال
كيف يمكنني تغيير الوقت الذي أجريت فيه ارتكاب مستودعي المحلي؟
لنفترض أنني فعلت عدة ارتكاب ولاحظت أن التاريخ على جهاز الكمبيوتر الخاص بي خطأ. لنفترض أيضا على عدم دفع هذه اللجنة إلى أي مكان حتى الآن.
المحلول
يمكنك أن تفعل ذلك بسهولة مع MQ (قوائم انتظار الزئبات):
إعداد تاريخ سيء repo
+ hg init
+ echo line
+ hg commit -A -d 12/1 -m first
adding file
+ echo line
+ hg commit -A -d 12/2 -m second
+ echo line
+ hg commit -A -d 12/3 -m third
+ hg log
changeset: 2:81c88de729a8
tag: tip
user: Ry4an Brase <ry4an@mini>
date: Thu Dec 03 00:00:00 2009 -0600
summary: third
changeset: 1:c1fe70008824
user: Ry4an Brase <ry4an@mini>
date: Wed Dec 02 00:00:00 2009 -0600
summary: second
changeset: 0:abb97adaa541
user: Ry4an Brase <ry4an@mini>
date: Tue Dec 01 00:00:00 2009 -0600
summary: first
تحويل التغييرات إلى بقع في قائمة الانتظار
+ hg qimport -r 2
+ hg qimport -r 1
+ hg qimport -r 0
اجعل كل تصحيح QTIP بدوره وإصلاح التاريخ
+ hg qrefresh -D
+ hg qpop
Now at: 1.diff
+ hg qrefresh -D
+ hg qpop
Now at: 0.diff
+ hg qrefresh -D
إعادة تطبيق البقع
+ hg qpush
applying 1.diff
Now at: 1.diff
+ hg qpush
applying 2.diff
Now at: 2.diff
قم بتشغيل كل تصحيح مرة أخرى إلى مشكلات حقيقية
+ hg qdel -r 0
+ hg qdel -r 1
+ hg qdel -r 2
كل شيء أفضل:
+ hg log
changeset: 2:6b51e14aadfc
tag: tip
user: Ry4an Brase <ry4an@mini>
date: Wed Feb 25 22:29:01 2009 -0600
summary: third
changeset: 1:5cbb9fc51bcc
user: Ry4an Brase <ry4an@mini>
date: Wed Feb 25 22:29:02 2009 -0600
summary: second
changeset: 0:ec58d1f24278
user: Ry4an Brase <ry4an@mini>
date: Wed Feb 25 22:29:02 2009 -0600
summary: first
نصائح أخرى
إذا كان الأمر مجرد ارتكاب واحد، وأن هذا الالتزام هو أحدث واحد (على أي فرع أنت على)، وهو بطانة سريعة للقيام بذلك هو:
hg commit --amend -d now
هناك --date
علم ل hg commit
, هذه هي الطريقة التي تكتمل بها الزمان. والسؤال هو كيفية الالتزام بالتغييرات السابقة دون أداة الكثير من الألم.
دعونا نفترض أنك تحصل على تاريخ اللجنة التالية التالية:
dir1> hg commit # r100, OK
dir1> hg commit # r101, need to fix time
dir1> hg commit # r102, need to fix time
إليك حلاي:
hg diff -r100:101 > 101.diff
hg diff -r101:102 > 102.diff
cd ..
hg clone -r100 dir1 dir2 # create a copy just before changesets than needs to be fixed
cd dir2
patch -i ../dir1/101.diff
hg commit -m "Same commit message" --date="required date"
patch -i ../dir1/102.diff
hg commit -m "Same commit message" --date="required date"
cd ..
rm -rf dir1 && mv dir2 dir1 # replace working copy
يمكنك أتمتة تطبيق بقع مع hg patch
التي لم أستخدمها في ممارستي بعد.
باستخدام HG's graft
و strip
يبدو وكأنه بديل أبسط لاستخدام MQ / Patches / evolve.
مع هذه الطريقة، أنت graft
يلتزمك بالفرع المكرر الثاني (أثناء الاستفادة من وظيفة تغيير التاريخ graft
). ثم من هناك يمكنك فقط strip
رجوع الفرع مع التواريخ السيئة .. قل على سبيل المثال، لقد خلقت بطريق الخطأ بعض ارتكاب التواريخ السيئة ويشبه تاريخك مثل الرسم البياني أدناه:
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@ 8:good commit (2018-03-18 20:13:07 2018 -0500)
|
o 7:erroneous commit two (2018-12-01 00:00:00 2018 -0600)
|
o 6:erroneous commit one (2018-12-01 00:00:00 2018 -0600)
|
o 5:commit before you started commiting bad dates
لإصلاح هذا الأمر، ما عليك سوى التحديث إلى آخر مراجعة جيدة قبل ارتكابها الخاطئة ثم انسخ ارتكاب فرع جديد (مجهول) باستخدام graft
:
> hg up 5
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> hg graft -D -r6 -r7 -r8
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@ 11:good commit (2018-03-18 20:14:48 2018 -0500)
|
o 10:erroneous commit two (2018-03-18 20:14:48 2018 -0500)
|
o 9:erroneous commit one (2018-03-18 20:14:48 2018 -0500)
|
| o 8:good commit (2018-03-18 20:13:07 2018 -0500)
| |
| o 7:erroneous commit two (2018-12-01 00:00:00 2018 -0600)
| |
| o 6:erroneous commit one (2018-12-01 00:00:00 2018 -0600)
|/
o 5:commit before you started commiting bad dates
الآن لديك فروع اثنين متطابقة مع نفس يرتكب مواعيد مختلفة. حتى الآن تحتاج فقط إلى إرجاع تاريخ خطي الخاص بك باستخدام strip
في الفرع القديم:
> hg strip -r6 -r7 -r8
saved backup bundle to /home/miles/repo/.hg/strip-backup/ac1973513844-a8f5244e-backup.hg
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@ 8:good commit (2018-03-18 20:14:48 -0500)
|
o 7:erroneous commit two (2018-03-18 20:14:48 -0500)
|
o 6:erroneous commit one (2018-03-18 20:14:48 -0500)
|
o 5:commit before you started commiting bad dates