Question

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:

  • mettre à jour la révision avant la suppression
  • copier les fichiers ailleurs
  • mettre à jour en tête
  • recopiez les fichiers
  • ajoutez-les
  • commit

Ça sent mauvais et ça perd toute l’histoire pour démarrer. Il doit y avoir un meilleur moyen de le faire. J'ai déjà consulté le livre SVN mais je n'ai rien trouvé et je regarde maintenant le tag SVN. liste.

Était-ce utile?

La solution

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 ...)

  • Faites un clic droit dans Explorer, accédez à TortoiseSVN - > Fusionner ...
  • Assurez-vous que & "Fusionner une plage de révisions &"; est sélectionné, cliquez sur Suivant
  • Dans la " plage de révision à fusionner " zone de texte, spécifiez la révision qui a supprimé le fichier
  • Vérifiez la ". fusion inverse " case à cocher, cliquez sur Suivant
  • Cliquez sur Fusionner

Cela n’a toutefois absolument pas été testé.

Edité par OP : Cela fonctionne sur ma version de TortoiseSVN (l'ancien type sans le bouton suivant)

  • Accédez au dossier dans lequel le contenu a été supprimé
  • Faites un clic droit dans Explorer, accédez à TortoiseSVN - > Fusionner ...
  • dans la section De , entrez la révision qui a supprimé
  • .
  • dans la section Vers , entrez la révision avant la suppression.
  • Cliquez sur & "Fusionner &";
  • commit

Le truc consiste à fusionner en arrière . Félicitations à sean.bright pour m'avoir orienté dans la bonne direction!

Modifier: nous utilisons différentes versions. La méthode que j'ai décrite a parfaitement fonctionné avec ma version de TortoiseSVN.

Il convient également de noter que si plusieurs modifications sont apportées à la validation, vous souhaitez inverser la fusion, vous voudrez annuler ces autres modifications une fois la fusion effectuée avant la validation. Sinon, ces modifications supplémentaires seront également annulées.

Autres conseils

Le problème de la 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.

En utilisant Tortoise SVN, vous pouvez ressusciter un fichier supprimé de votre répertoire de travail et des révisions SVN ultérieures, via une copie svn comme suit:

  • Accédez au dossier de la copie de travail contenant auparavant le fichier.
  • Faites un clic droit sur le dossier dans l'explorateur, allez à TortoiseSVN - > Afficher le journal.
  • Cliquez avec le bouton droit sur le numéro de révision juste avant la révision qui a supprimé le fichier et sélectionnez & "Parcourir le référentiel &";
  • .
  • Cliquez avec le bouton droit sur le fichier supprimé et sélectionnez " Copier dans la copie de travail ... " et économisez.

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 conservera l’historique précédent du fichier restauré. Toutefois, pour afficher l’historique précédent dans le journal TortoiseSVN, vous devez vous assurer que & "Arrêter la copie / renommer &"; n'est pas cochée dans la boîte de dialogue Enregistrer les messages.

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:

Annuler les modifications

Réanimation des éléments supprimés

Même chose, tiré de la version plus récente (et détaillée) du livre:

Annuler les modifications

Réanimation d'éléments supprimés

Utilisez la fonctionnalité de copie Tortoise SVN pour annuler les modifications validées:

  1. Cliquez avec le bouton droit sur le dossier parent contenant les fichiers / dossiers supprimés
  2. Sélectionnez le & "Afficher le journal &";
  3. Sélectionnez et cliquez avec le bouton droit de la souris sur la version avant laquelle les modifications / suppressions ont été effectuées
  4. Sélectionnez le ". parcourir le référentiel "
  5. Sélectionnez le fichier / dossier à restaurer et cliquez avec le bouton droit de la souris
  6. Sélectionnez & Copier dans " qui copiera les fichiers / dossiers dans la révision principale

L’espoir que cela aide

Il semble que j'utilise toujours svn copy en tant qu'opération serveur, donc je ne suis pas sûr que cela fonctionne avec deux chemins fonctionnels.

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 également 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 effectuez un autre commit pour rajouter le fichier. Les étapes à suivre sont les suivantes:

  1. Accédez au dossier de la copie de travail où vous avez supprimé le fichier.
  2. Accédez au repo-browser.
  3. Accédez à la révision où vous avez supprimé le fichier.
  4. Dans la liste des modifications, recherchez le fichier que vous avez supprimé.
  5. Cliquez sur le fichier avec le bouton droit de la souris et sélectionnez & "Rétablir les modifications de cette révision &";
  6. .
  7. Ceci restaurera le fichier sur votre copie de travail tout en conservant l'historique.
  8. Commettez le fichier pour le rajouter dans votre référentiel.

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 dans laquelle le fichier existait toujours, puis utiliser la commande Copier vers ... du menu contextuel. Entrez le chemin de 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 consiste à utiliser copie SVN . L'exemple de fusion ci-dessus me semble être un moyen plus complexe d'obtenir la même chose. 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

Il semble que j'utilise toujours svn copy en tant qu'opération de serveur, donc vous ne savez pas si cela fonctionne avec deux chemins d'accès fonctionnels.

Vous devriez pouvoir simplement extraire le fichier que vous souhaitez restaurer. Essayez quelque chose comme svn co svn://your_repos/path/to/file/you/want/to/restore@revrev est la dernière révision à laquelle le fichier existait.

Je devais faire exactement cela il y a un moment 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 ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top