Réparer un dépôt git après l'échec de git svn dcommit
Par haypo, mercredi 2 septembre 2009 à 00:41 :: Logiciel libre :: #203 :: rss
git-svn est bien pratique pour travailler en local (déconnecté) sur un dépôt Subversion. Le plus gros défaut de cet outil est que lorsque la commande "git svn dcommit" échoue, il laisse le dépôt dans un état assez chaotique. Heureusement l'outil git est conservateur : il est toujours possible de revenir en arrière, sauf que l'opération est très technique et délicate.
Récupérer le numéro de commit
La première étape est de retrouver le numéro du commit qui a échoué en ouvrant le fichier .git/logs/HEAD (j'ai mis des "..." pour votre santé mentale, les logs sont assez illisibles sinon) :
... eb85fa... e72f83... Victor <haypo@bart> 1251220925 +0000 rebase: access: move calls to network/status from frontend to backend e72f83... 5112b1... Victor <haypo@bart> 1251220965 +0000 refs/remotes/git-svn: updating HEAD 5112b1... 0f86ea... Victor <haypo@bart> 1251220979 +0000 refs/remotes/git-svn: updating HEAD
Le format du fichier est « uid avant | uid après | nom | timestamp | message ». Disons que c'est la dernière opération (la dernière ligne) qui a merdé. Il faut donc revenir à la version précédente (avant dernière ligne) :
e72f83... 5112b1... (...) 1251220965 (...): updating HEAD
Il faut l'ancien numéro de commit (première colonne donc) : e72f83....
Récupérer ses commits
La commande pour revenir à la version précédente (avant le chao laissé par git svn dcommit) est :
git reset --hard e72f83...
Tada ! Pour comprendre ce qui s'est passé, on peut jetter un oeil à .git/logs/HEAD :
... eb85fa... e72f83... Victor <haypo@bart> 1251220925 +0000 rebase: access: move calls to network/status from frontend to backend e72f83... 5112b1... Victor <haypo@bart> 1251220965 +0000 refs/remotes/git-svn: updating HEAD 5112b1... 0f86ea... Victor <haypo@bart> 1251220979 +0000 refs/remotes/git-svn: updating HEAD 0f86ea... e72f83... Victor <haypo@bart> 1251221469 +0200 e73f83...: updating HEAD
Articles similaires
Autres articles (en anglais) qui décrivent cette « astuce » :
Commentaires
1. Le mercredi 2 septembre 2009 à 19:55, par Mjules
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.