Comment «annuler la suppression» d'un dossier supprimé dans Subversion / TortoiseSVN?

96

Nous avons accidentellement supprimé le dossier 'tags' de notre référentiel Subversion où nous n'avions l'intention de supprimer qu'une seule balise spécifique. Quelle est la manière la plus simple de récupérer le dossier «tags»?

Nous utilisons TortoiseSVN comme client et je pensais que lorsque je vais dans le navigateur de dépôt et afficher le journal, il y aura quelque chose comme "annuler les modifications de cette révision" de la même manière que ce que vous pouvez voir dans une boîte de dialogue similaire sur votre copie de travail. Mais il n'y a pas de telle commande là-bas ...

Borek Bernard
la source

Réponses:

115

Copiez simplement le dossier supprimé d'une révision antérieure.

Dans le navigateur du référentiel, cliquez sur le bouton intitulé HEAD (dans le coin supérieur droit) pour afficher à une révision où votre dossier existe toujours, puis cliquez avec le bouton droit sur ce dossier et sélectionnez "Copier vers ..." et entrez le chemin d'accès là-bas. veulent que le dossier soit recréé (probablement le même chemin qui se trouve déjà dans la zone de texte).

Mikael Sundberg
la source
4
Bon conseil, merci. Un tortoiseSVN gotcha - dans cette boîte de dialogue "copier vers ...", j'ai dû changer le chemin de 'example.com/svn/tags' à 'tags1', puis de nouveau pour que le bouton OK soit activé.
Borek Bernard
2
Cela peut convenir aux balises, mais ne devrait pas être fait pour annuler la suppression d'un autre dossier car vous perdrez l'historique
slckin
3
Cela garde l'histoire, je l'ai fait aussi.
acdcjunior
assurez-vous simplement de décocher "Arrêter à la copie / renommer" lors de la visualisation du journal, car sinon TortoiseSVN n'affichera pas l'historique avant votre action de restauration (évidemment) ...
Oli
Cela a totalement fonctionné. J'ai économisé beaucoup de temps. Merci :)
dgupta3091
78

pour les passionnés de ligne de commande:

  • recherchez d'abord le numéro de révision où votre suppression a eu lieu:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

disons que vous trouvez que le répertoire a été supprimé dans la révision 999 (btw: vous trouverez peut-être plus facile de trouver le numéro de révision avec le navigateur svn repo)

  • copier le dossier de la révision moins 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà vous avez terminé!

dans votre cas, cela pourrait être:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"
Raudi
la source
1
Merci ... économisé beaucoup de temps
Dharani Kumar
Cela a sauvé mon bacon!
axiopisty
Je voulais juste confirmer que l'approche "svn copy" préserve en fait tout l'historique, et pour les dossiers, elle fonctionne de manière récursive, en restaurant le dossier et tous les enfants.
WallStProg
11

La plupart de ces réponses fonctionneront dans une certaine mesure, mais la bonne réponse est celle de Daniel. Faites une fusion inversée. De cette façon, vous conservez l'historique des versions.

svn merge -r R1:R2

où R1 est la révision à laquelle vous vous trouvez et R2 est la révision qui contient le fichier / dossier supprimé.

Miles
la source
1
Dans une fusion inversée, R1 doit être la révision que vous souhaitez rétablir, R2 étant la révision antérieure.
arleslie
2
Vous ne perdez aucune histoire avec svn copy.
maxschlepzig
Pour ceux d'entre nous qui ne sont pas des passionnés de ligne de commande, voir: tortoisesvn.net/docs/nightly/TortoiseSVN_en/...
Pascal
2
Cela ne restaurerait-il pas tous les fichiers / dossiers supprimés? Cela fonctionnerait-il si je ne souhaite restaurer qu'un seul dossier supprimé spécifique mais pas d'autres dossiers supprimés?
OJ7
8

Vous devrez effectuer une fusion inversée .

Pour plus de détails sur la façon de le faire (et à peu près tout ce que vous voudriez ou devez faire avec SVN), le livre officiel est disponible en ligne .

Daniel
la source
3

Suite à la réponse de Raudi qui a fonctionné pour moi après cette révision.

Certains clients svn peuvent avoir besoin du numéro de révision spécifié à l'aide du paramètre de révision -r au lieu d'utiliser @ après le dossier comme suit:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"
Paul
la source
Si vous restaurez à partir d'un dossier qui existe toujours, -r <revision>cela fonctionnera. Cependant, si vous essayez de restaurer le dossier directement, vous devrez utiliser @<revision>. Sinon, il vous indiquera que le fichier n'a pas été trouvé.
arleslie
2

Allez à Repository Browservotre repository, faites un clic droit sur le dossier parent où se trouvait votre dossier supprimé . Maintenant, Show Logdu dossier parent, et sélectionnez la révision précédente où vous avez commis l'opération de suppression. Vous aurez une liste et faites un clic droit sur le dossier à partir des informations de révision et sélectionnezUpdate to this Revision .

Vous avez terminé

Abdul Munim
la source
Oh, je vois, ce n'était pas dans la boîte de dialogue Afficher le journal mais dans la fenêtre principale du navigateur de dépôt. Pourtant, cette commande tentera de mettre à jour ma copie de travail locale pendant que j'aimerais résoudre ce problème directement sur le serveur (vous pouvez imaginer que vérifier des centaines de balises, chacune contenant des milliers de fichiers, n'est pas exactement ce que je voudrais faire).
Borek Bernard
Cela a fonctionné pour moi. L'option du menu contextuel (sur le clic droit) est "Annuler les modifications de cette révision" et elle inverserait la fusion des modifications.
hsg