68 votes

Besoin de restaurer une branche supprimée dans Subversion

J'ai deux copies de travail d'un dépôt Subversion, l'une du tronc et l'autre d'une branche que j'ai créée.

J'ai accidentellement supprimé la branche dans un navigateur de dépôt. Comment puis-je restaurer la branche ? Existe-t-il un moyen d'annuler le commit le plus récent pour l'ensemble du dépôt ?

100voto

Brian Neal Points 13668

Voici une solution si vous utilisez TortoiseSVN:

  1. Dans le navigateur de dépôt, accédez au dossier parent du dossier que vous avez supprimé (par exemple "branches").
  2. Cliquez avec le bouton droit sur le dossier et sélectionnez "Afficher l'historique".
  3. Trouvez la révision où vous avez supprimé le dossier de la branche spécifique.
  4. Sélectionnez la révision juste avant cette révision.
  5. Cliquez avec le bouton droit et choisissez "Parcourir le dépôt". Vous regardez maintenant l'état du dépôt à la date juste avant la suppression de la branche.
  6. Trouvez le dossier de la branche que vous avez supprimé, sélectionnez-le, cliquez avec le bouton droit et choisissez "Copier vers...".
  7. Vous pouvez maintenant copier le dossier supprimé avec un nouveau nom ou même le même nom.

0 votes

Vous pouvez ensuite vous rendre à la branche renommée dans le navigateur de dépôt le plus récent / principal et copier de nouveau sur le nom de la branche d'origine. L'historique des journaux de la branche montrera ensuite un détour via la branche "restaurée" mais fonctionnera.

0 votes

FYI, une belle fonctionnalité supplémentaire est que l'historique des révisions de la branche est également restauré. Il vous suffit de cliquer avec le bouton droit sur la branche restaurée et de cliquer sur "Afficher l'historique". Ensuite, si vous décochez "Arrêt sur copie/renommer", cela vous montrera l'historique complet de la branche.

0 votes

Accueilli ma journée. Était sur le point de refaire environ une semaine de travail. Est génial que je puisse garder le même nom.

81voto

John Weldon Points 19132

Utiliser :

svn cp [chemin de la branche supprimée]@[révision avant suppression] [nouveau chemin]

Par exemple :

svn cp svn://monrepo.com/svn/branches/2.0.5@1993 \
       svn://monrepo.com/svn/branches/2.0.5_restored

Où 1993 est la révision avant la suppression...

Ici se trouve une bonne documentation...

Il doit y avoir un moyen d'échapper au symbole @ dans le nom d'utilisateur...

0 votes

Ne semblait pas fonctionner, j'utilise svn+ssh parce que c'est sur un serveur local, donc j'ai essayé svn cp svn+ssh://username@serverip/svn/branches/branch-name@9999 svn:ssh://username@serverip/svn/branches/branch-name et j'ai obtenu "Chemin 'svn+ssh://username@serverip/svn/branches/branch@9999' n'existe pas dans la révision 9998"

0 votes

Quel était le numéro de révision dans lequel vous avez supprimé la branche ? Vous devez spécifier cette version moins 1...

0 votes

Oui, désolé, j'ai écrit ça à l'envers, échangez les 9999 et 9998

4voto

leonm Points 4836

En supposant que votre dernière révision était la 108 :

svn merge --revision 108:107
svn diff 
svn commit -m "Rétabli la révision 108"

Vous pouvez également ajouter l'URL de votre source à la fusion :

svn merge --revision 108:107 http://svn/repo/

Ailleurs sur Stack Overflow : Annuler un commit dans TortoiseSVN

0 votes

Ceci ne semble pas non plus fonctionner. Je reçois l'erreur indiquant que le chemin /branches/branch-name n'existe pas dans la révision 108, où 108 est la révision après avoir supprimé la branche

1 votes

Ok. Vous devrez probablement consulter /branches. Vos branches sont-elles très nombreuses ou simplement gérables?

1 votes

Pour un grand projet avec de nombreuses branches, effectuer un checkout /branches serait assez coûteux par rapport à la commande "svn cp" que John Weldon a suggérée.

3voto

Alan B. Dee Points 1254

Je suis tombé sur ce problème, mais la commande ci-dessus n'a pas fonctionné pour moi. Ce qui a fonctionné était beaucoup plus facile. J'ai vérifié la branche à une révision avant de la supprimer.

La révision qui a été supprimée était la 9331. Je l'ai vérifiée à la 9330 :

svn co https://svn.acme.com/svn/giantFlySwatterTargetingSystem/branches/bug1234@9330 restored

C'était la solution facile que je voulais.

2 votes

De cette façon, vous obtiendrez votre copie de travail dans l'état désiré, mais le dépôt restera le même, donc les autres développeurs ne verront pas la branche supprimée (ce qui n'est probablement pas ce que vous vouliez accomplir).

1voto

Dmitry Brant Points 2567

Hmm... vous devriez créer une nouvelle branche à partir de la révision de la branche d'origine juste avant d'avoir été supprimée. Ensuite, copiez physiquement toutes les modifications de votre copie de travail orpheline dans la nouvelle branche créée.

Je crains qu'il n'y ait pas de moyen de "annuler" quoi que ce soit dans Subversion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X