2009-02-25 5 views
17

Comment puis-je modifier l'heure à laquelle j'ai effectué une validation dans mon référentiel local? Supposons que j'ai effectué plusieurs validations et remarqué que la date sur mon ordinateur est erronée. Supposons aussi que ces commits n'aient été poussés nulle part encore.Comment modifier le temps de validation (pas encore activé)?

Répondre

11

Vous pouvez le faire facilement avec MQ (Mercurial Queues):

Mettre en place une mauvaise date de prise en pension

+ 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 <[email protected]> 
date:  Thu Dec 03 00:00:00 2009 -0600 
summary:  third 

changeset: 1:c1fe70008824 
user:  Ry4an Brase <[email protected]> 
date:  Wed Dec 02 00:00:00 2009 -0600 
summary:  second 

changeset: 0:abb97adaa541 
user:  Ry4an Brase <[email protected]> 
date:  Tue Dec 01 00:00:00 2009 -0600 
summary:  first 

Tourner les changesets en patches dans la file d'attente

+ hg qimport -r 2 
+ hg qimport -r 1 
+ hg qimport -r 0 

Faire de chaque patcher le qtip à son tour et fixer la date

+ hg qrefresh -D 
+ hg qpop 
Now at: 1.diff 
+ hg qrefresh -D 
+ hg qpop 
Now at: 0.diff 
+ hg qrefresh -D 

réappliquer les patchs

+ hg qpush 
applying 1.diff 
Now at: 1.diff 
+ hg qpush 
applying 2.diff 
Now at: 2.diff 

Mettez chaque patch de nouveau dans changesets réel

+ hg qdel -r 0 
+ hg qdel -r 1 
+ hg qdel -r 2 

tout mieux:

+ hg log 
changeset: 2:6b51e14aadfc 
tag:   tip 
user:  Ry4an Brase <[email protected]> 
date:  Wed Feb 25 22:29:01 2009 -0600 
summary:  third 

changeset: 1:5cbb9fc51bcc 
user:  Ry4an Brase <[email protected]> 
date:  Wed Feb 25 22:29:02 2009 -0600 
summary:  second 

changeset: 0:ec58d1f24278 
user:  Ry4an Brase <[email protected]> 
date:  Wed Feb 25 22:29:02 2009 -0600 
summary:  first 
+1

Une bonne façon native (bien que nécessite une compréhension de MQ). Merci! –

+0

Ceci inverse l'ordre chronologique dans lequel cset 2 semble avoir été validé avant cset 1. Je suggère la procédure suivante: import; pop tout; pousser, rafraîchir, pousser, rafraîchir, pousser, rafraîchir, supprimer tout. Cela semble faire l'affaire tout en conservant des horodatages progressifs. –

+0

Vous pouvez définir les dates sur chacun de vos choix avec qrefresh, donc vraiment l'une ou l'autre méthode fonctionne de la même manière. –

10

Il y a --date pour hg commit, c'est ainsi que vous écrasez le temps de validation. La question est de savoir comment renouveler les changements précédents sans trop de peine.

Supposons que vous obtenez l'histoire suivante de commits locales:

dir1> hg commit # r100, OK 
dir1> hg commit # r101, need to fix time 
dir1> hg commit # r102, need to fix time 

Voici ma solution:

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 

Vous pouvez automatiser l'application des correctifs avec hg patch que je ne l'utilise pas dans ma pratique .

+0

Un moyen simple et propre. Merci! –

+3

Vous pouvez simplement utiliser "hg strip" pour supprimer la ou les révision (s) incriminée (s) au lieu du clonage. – skypher

8

Si c'est juste un seul commit et qui commettent est le plus récent un (sur n'importe quelle branche vous êtes sur), un rapide un pour ce faire est:

hg commit --amend -d now 
Questions connexes