Changer le contenu d'un commit sous SVN

Bonjour tout le monde,

J’ai un serveur SVN sur mon serveur Debian. Bien entendu (il fallait que ça arrive un jour), j’ai commité par mégarde un mot de passe dans un des fichiers versionnés.

Je voudrais le changer par la mention “mot_de_passe_a_la_noix” mais je n’y parviens pas.

J’ai identifié le fichier suivant comme porteur du commit malheureux :
/srv/svn/reseau/db/revs/0/124

Si je l’édite avec Vim, SVN est ensuite “corrompu”. De même avec sed si je cible juste la bonne ligne et que je change le mot de passe. En fait, si j’ai tenté cette deuxième méthode, c’était dans l’espoir que cela change quelque chose dans la façon de sauvegarder le fichier car il semble que les révisions SVN soit “un peu” binaires par endroit.

Exemple en question :

[code]server-bl:/srv/svn/reseau# cat ./db/revs/0/124 | head -n 20
DELTA 121 0 876
SVN��

�s���q�# cp /srv/reseau/ressources/apache/roundcube /etc/apache2/sites-available/

a2ensite roundcube

/etc/init.d/apache2 reload

Il sera possible de sauvegarder automatiquement la base de données de
Roundcube en ajoutant la ligne suivante au cron de l’utilisateur root :

0 4 * * * mysqldump -u root --password=mot_de_passe_a_la_noix roundcube | gzip > /srv/sauvegardes/mysql/roundcube.gzENDREP

id: 0-115.0-20.r124/434
type: file
pred: 0-115.0-20.r123/2167
count: 6
text: 124 0 411 2569 49e60c3ac00f3ef5e997df8cb5dd1cb4
cpath: /branches/serveur_mail/mail.txt
copyroot: 20 /branches/serveur_mail

PLAIN
K 26
[/code]

Évidemment, dans cet exemple, j’arrive à changer le mot de passe ^^

Je pense que je vais simplement devoir changer de mot de passe mais à vrai dire, j’espère vraiment qu’il est possible de faire quelque chose.

Merci de votre aide !

Si je ne me trompe pas avec svn on peut revenir à une révision précédente si il y a un problème, non? donc tu reviens à la révision précédent ton erreur, et tu vire tout le contenu de ta dernière révision.

Ballade toi par ici, je pense que c’est ce qu’il te faut.

Merci pour ton aide L0u!$

Grâce à toi, j’ai au moins confirmation que ce n’est pas possible, ce qui est une réponse :S Du moins, ce n’est pas possible en exploitant directement les possibilités de SVN.

En effet, ton lien explique que la seule solution à ce jour est de dumper le projet et d’en extraire à la volée la branche en question avant de recharger le projet. C’est pas tellement envisageable, il me faut cette branche, seul un mot d’une révision me gêne :slightly_smiling:

Mon but n’est pas non plus tellement de supprimer une révision comme c’est souvent le cas (et de casser le différentiel en cascade de SVN) mais juste de changer un mot dans un fichier qui est dans un format un peu particulier. Je me demande s’il existe un utilitaire capable d’écrire ce fichier sans l’invalider… Je pense que je ne casserais pas mon dépôt SVN si un tel outil existe car il y aurait toujours une différence mais avec un autre mot de passe encore !

Personne sur cette piste ? Merci d’avance.

Youpi… J’ai trouvé comment réparer :slightly_smiling:

Mes recherches m’ont confirmé qu’il est normalement impossible d’intervenir sur un historique SVN mais, dans mon cas très précis, je peux supprimer le mot de passe que j’ai commité !

Je n’arrive pas à éditer le fichier de la révision car il est “un peu” (c’est bizarre que ce soit seulement en partie d’ailleurs) binaire.

J’ai eu l’idée de regarder du côté des dumps SVN : pour rappel, on fait svnadmin dump /path/to/repo > /path/vers/la/sauvegarde dans le cron et hop ! On peut au passage gzipé le flux, ça ne mange pas de pain mais c’est un autre sujet.

Mon contexte : j’ai fait un commit avec le mot de passe et depuis j’ai continué de commiter, je ne veux donc pas perdre la suite non plus. Mon dump a été actualisé/écrasé plusieurs fois depuis et il contient aussi mon mot de passe (je m’en suis aperçu trop tard pour simplement le restaurer).

On peut cependant éditer le dump qui est en clair :

  • cp -r /path/to/repo/ /tmp/sauvegarde (c’est encore plus simple qu’un dump alors pour éviter les bêtises, autant passer par un cp avant de bricoler)
  • vi /path/vers/la/sauvegarde
  • recherche du mot de passe
  • changement du mot de passe
  • rm -rf /path/to/repo (si si !!)
  • svnadmin create /path/to/repo (on repart à zéro)
  • svnadmin load /path/vers/la/sauvegarde (la version modifiée)

Pour ma part j’ai eu cette erreur :
<<< Début d’une nouvelle transaction basée sur la révision 124
svnadmin: Sommes de contrôle différentes, fichier ‘/branches/serveur_mail/mail.txt’ :
attendu : 49e60c3ac00f3ef5e997df8cb5dd1cb4
obtenu : 8e9ad652b052c24410ace4af17030d18

Là on comprend donc qu’il y a un contrôle de somme, qu’à cela ne tienne j’ai édité à nouveau mon dump pour remplacer attendu par obtenu… et j’ai recommencé la procédure.

J’ai encore eu un problème qui m’a enseigné qu’il y avait une vérification de la longueur des messages et là, plutôt que compter les caractères et changer la valeur, j’ai simplement mis autant de caractères “?” que j’avais de caractères à mon mot de passe. Et j’ai recommencé la procédure (évidemment ça a échoué pour le contrôle de somme donc j’ai recommencé… bref faut être patient).

Mais voilà, ça marche. J’ai toutes mes révisions, mon mot de passe est nulle part.

Ça finira forcément par servir à quelqu’un d’autre donc j’ai documenté ici. A bon entendeur, merci pour tout.