J'ai supprimé un fichier d'un référentiel et je souhaite maintenant le remettre en place. Le mieux que je puisse comprendre est de:
Cela sent juste mauvais et il perd toute l'histoire pour démarrer. Il doit y avoir un meilleur moyen de le faire. J'ai déjà regardé dans le livre SVN mais je n'ai rien trouvé et je regarde maintenant la liste des tags SVN.
Utilisez svn merge:
svn merge -c -[rev num that deleted the file] http://<path to repository>
Donc, un exemple:
svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
^ The negative is important
Pour TortoiseSVN (je pense ...)
C'est complètement non testé, cependant.
Edité par OP : Cela fonctionne sur ma version de TortoiseSVN (l'ancien type sans le bouton suivant)
L'astuce consiste à fusionner à l'envers . Bravo à sean.bright pour m'avoir dirigé dans la bonne direction!
Edit: Nous utilisons différentes versions. La méthode que j'ai décrite a parfaitement fonctionné avec ma version de TortoiseSVN.
Il est également à noter que s'il y a eu plusieurs modifications dans la validation, vous effectuez une fusion inverse, vous voudrez annuler ces autres modifications une fois la fusion effectuée avant la validation. Si vous ne le faites pas, ces modifications supplémentaires seront également annulées.
Le problème de faire une fusion svn, comme suggéré par Sean Bright, consiste à réintroduire d'autres modifications apportées dans la même révision que la suppression. Une copie de svn est une opération plus ciblée qui n’affectera que les fichiers supprimés.
Tortoise SVN vous permet de ressusciter un fichier qui a été supprimé de votre répertoire de copie de travail et de révisions SVN ultérieures, via une copie svn comme suit:
Le fichier supprimé sera maintenant dans le dossier de la copie de travail. Pour le ré-ajouter à SVN, cliquez avec le bouton droit sur le fichier restauré et sélectionnez SVN Commit.
NB: Cette méthode préservera l'historique précédent du fichier restauré. Toutefois, pour voir l'historique précédent dans le journal TortoiseSVN, vous devez vous assurer que "Arrêter la copie/le nom renommé" est décoché dans la boîte de dialogue Messages de journal.
Pour être complet, voici ce que vous auriez trouvé dans le livre svn, si vous aviez su quoi rechercher. C'est ce que vous avez déjà découvert:
ressuscitation des éléments supprimés
Même chose, de la version plus récente (et détaillée) du livre:
Utilisez la fonctionnalité de copie Tortoise SVN pour annuler les modifications validées:
J'espère que ça t'as aidé
Je semble toujours utiliser svn copy comme une opération de serveur, donc je ne sais pas si cela fonctionne avec deux chemins de travail.
Voici un exemple de restauration d'un fichier supprimé dans une copie de travail locale du projet:
svn copy https://repos/project/modules/module.js@3502 modules/module.js
Tout en étant dans le répertoire du projet. Cela fonctionne aussi bien pour la restauration de répertoires entiers.
Si vous utilisez Tortoise SVN, vous devriez être en mesure de revenir sur votre copie de travail (en effectuant une fusion inversée), puis d'effectuer un autre commit pour ré-ajouter le fichier. Les étapes à suivre sont:
Avec Tortoise SVN :
Si vous n'avez pas encore validé vos modifications, vous pouvez rétablir le dossier parent dans lequel vous avez supprimé le fichier ou le répertoire.
Si vous avez déjà validé le fichier supprimé, vous pouvez utiliser le navigateur de référentiel, passer à la révision où le fichier existait toujours, puis utiliser la commande Copier vers ... du menu contextuel. Entrez le chemin d'accès à votre copie de travail en tant que cible et le fichier supprimé sera copié du référentiel vers votre copie de travail.
Le moyen le plus simple de restaurer des fichiers sans perdre l'historique des révisions est d'utiliser copie SVN, l'exemple de fusion ci-dessus me semble être un moyen plus complexe d'atteindre le même objectif. Pourquoi est-il nécessaire de fusionner lorsque vous souhaitez simplement restaurer une révision?
J'utilise ce qui suit dans cet exemple et cela fonctionne assez bien.
svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs
Je semble toujours utiliser svn copy
en tant qu'opération de serveur, vous ne savez donc pas si cela fonctionne avec deux chemins de travail.
Vous devriez pouvoir extraire le fichier que vous voulez restaurer. Essayez quelque chose comme svn co svn://your_repos/path/to/file/you/want/to/restore@rev
Où rev
est la dernière révision à laquelle le fichier a existé.
Je devais faire exactement cela il y a quelques temps et si je me souviens bien, utiliser l'option -r
Pour svn
ne fonctionnait pas; Je devais utiliser la syntaxe :rev
. (Bien que j'aie pu m'en souvenir à l'envers ...)