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
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
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 .
Un moyen simple et propre. Merci! –
Vous pouvez simplement utiliser "hg strip" pour supprimer la ou les révision (s) incriminée (s) au lieu du clonage. – skypher
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
Une bonne façon native (bien que nécessite une compréhension de MQ). Merci! –
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. –
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. –