Blog Haypo

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 2 septembre 2009

Réparer un dépôt git après l'échec de git svn dcommit

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 » :

apt-get install ...

Voici une liste mise à jour des paquets que j'installe sur une Debian vierge. Lire aussi ma liste de l'année dernière. Cette liste vise à obtenir une machine de développement sous KDE4 avant quelques outils réseaux et multimédias.

Administration du système

  • sudo : passer temporaire root pour exécuter une commande
  • screen : terminal qu'on peut détacher / rattacher pour pouvoir conserver des programmes quand on ferme le terminal (typiquement le client IRC irssi)

Environnement de bureau KDE

  • KDE minimal :
    • kde-minimal
    • kde-standard
    • kde-l10n-fr : Traduction française
  • Courrier et RSS :
    • kaddressbook : Carnet d'adresse
    • akregator : chouette client RSS
    • kmail : mon client mail favori
  • kdeplasma-addons : Plasmoïdes KDE4
  • Groupes d'applications KDE :
    • kdegraphics : Appliactions graphiques
    • kdegames : Jeux
    • kdemultimedia : Applications multimédia
    • kdetoys : Gadgets
    • kdenetwork : Outils réseaux
    • kdeutils : Utilitaires
    • kdeedu : Applications éducatives
    • kdeadmin : Outils d'administration
    • kdeartwork : thèmes et styles

Applications graphiques

  • iceweasel iceweasel-l10n-fr : Firefox et sa traduction française
  • flashplugin-nonfree : Plugin officiel Flash

Développement

  • Compilation :
    • gcc : Compilateur C
    • autoconf automake libtool : autotools
    • make
    • cmake
  • Édition de code :
    • exuberant-ctags : ctags, indexeur de code source permettant de retrouver un symbole (variable / fonction) dans un projet
    • manpages-dev manpages-fr : Pages de manuel
    • vim-gtk : Éditeur vim dans sa version Gtk
  • Gestionnaire de source :
    • git-core
    • git-svn
    • mercurial
    • subversion
  • Débogage :
    • gdb : Débogueur C / C++
    • strace : Tracer les appels systèmes
    • ltrace : Tracer les appels aux bibliothèques
    • lsof : Lister les fichiers ouverts
  • valgrind : Recherche les fuites mémoires et accès invalides à la mémoire
  • diffstat : Statistiques sur un patch (différences)
  • Analyseur statique/dynamique de code Python :
    • pychecker
    • pyflakes
    • pylint

Multimédia

  • gimp : Manipulation de photo
  • gqview : Affichage rapide de photos
  • mplayer : Lecteur audio/vidéo
  • vlc : Lecteur audio/vidéo

Réseau

  • nmap : Scanneur de ports
  • tcpdump : Sniffeur réseau (dumpe le trafic)
  • wireshark : Parseur de paquets et sniffeur réseau
  • netcat netcat6 : client et serveur TCP et UDP générique permettant de s'envoyer du texte ou des fichiers

SSH

  • openssh-server : Serveur SSH
  • sshfs : Monter un dossier distant via SSH (utilise FUSE)
  • keychain : Mémoriser la passphrase SSH (Gnome ne semble pas avoir besoin de keychain, il intègre son propre outil)
  • ssh-askpass : Saisie de la passphrase SSH

Compilation de paquets Debian

  • dpkg-dev : outils de base pour compiler un paquet
  • fakeroot : Permet de compiler un paquet sans être root

La commande "apt-get build-dep paquet" permet d'installer toutes les dépendences pour compiler le paquet spécifié.