«Annuler l'ajout» d'un fichier à svn avant de valider

200

J'étais en train de faire un ajout / validation svn récursif, et un dossier qui n'avait pas les propriétés ignorer appropriées était inclus. J'ai environ 100 fichiers binaires téléchargés maintenant, mais je ne me suis pas encore engagé.

Quelle est la manière la plus simple de «défaire» cela, sans supprimer tous les documents?

Lowgain
la source

Réponses:

244

Utilisation svn revert --recursive folder_name


avertissement

svn revertest intrinsèquement dangereux, car son objectif est de supprimer les données, à savoir vos modifications non validées. Une fois que vous êtes revenu, Subversion ne fournit aucun moyen de récupérer ces modifications non validées.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html

Julien Lebosquain
la source
12
Pour étendre cela - revertsans qu'une révision spécifiée n'annule toutes les modifications qui se sont produites depuis la dernière extraction, y compris les modifications de planification d'ajout / suppression, pour le ou les fichiers spécifiés.
Ambre
où nom_dossier est le dossier parent du dossier dans lequel vous avez effectué la commande "Ajouter"
MacGyver
28
Cette réponse est dangereusement incorrecte - elle mettra en échec vos modifications EN SUPPRIMANT VOS COPIES LOCALES DES FICHIERS. La réponse de Brian Lacy ci-dessous est bien meilleure.
Henry Henrinson
6
Les gars, cela répond à la question d'origine: un fichier ou un dossier qui a été ajouté, puis rétabli, ne revient qu'à être non versionné, sans être supprimé. C'est exactement ce que demande la question. Si vous l'utilisez sur des fichiers modifiés, bien sûr, il les annule: mais ce n'était pas la question. C'est même le cas d'utilisation très spécifique montré sur la page liée!
Julien Lebosquain
2
@JulienLebosquain D'accord, je suppose que vous et moi comprenons cette phrase différemment: sans supprimer tous les documents . Malheureusement, svn revertsupprime également les modifications récemment ajoutées dans la copie de travail, en restaurant la dernière HEADversion. J'ai supprimé mon downvote, mais je pense toujours que l'avertissement est important.
jpaugh
146

svn rm --keep-local folder_name

Remarque: Dans svn 1.5.4, svn rm supprime les fichiers non versionnés même lorsque --keep-local est spécifié. Voir http://svn.haxx.se/users/archive-2009-11/0058.shtml pour plus d'informations.

Brian Lacy
la source
9
C'est bon à savoir car cela vous permet d'annuler simplement le "svn add" sans perdre les modifications!
Ryan
1
Êtes-vous certain que SVN 1.5.4 supprime les fichiers non versionnés? Le rapport n'était pas reproductible, et il n'y a pas d'autre e-mail à ce sujet.
Quentin Pradet
4
Il s'agit de la meilleure réponse si vous souhaitez «annuler l'ajout» des fichiers, tout en les conservant. Après cette commande, les fichiers seront toujours là avec le? statut.
Robin Zimmermann
32

Essayez svn revert filenamepour chaque fichier dont vous n'avez pas besoin et que vous n'avez pas encore validé. Vous pouvez également procéder svn revert -R folderpour le dossier problématique, puis refaire l'opération avec une configuration d'ignorance correcte.

De la documentation:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops
bobah
la source
4
Non! Revert n'est pas sûr, car il perd tous les changements locaux
jpaugh
@jpaugh - C'est exactement ce que j'ai écrit dans la réponse, non?
bobah
1
Ce que l'OP a demandé (et ce à quoi je m'attendais) était une commande pour annuler l'ajout sans perdre les modifications locales. svn revert. Aucune des réponses ici ne mentionne le fait que les modifications locales seront perdues par le retour.
jpaugh
3

Processus complet (package Unix svn):

Vérifiez que les fichiers ne sont pas dans SVN:

> svn st -u folder 
? folder

Ajouter tout (y compris les fichiers ignorés):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Supprimer le drapeau "Ajouter" à tous les fichiers * Ignorer *:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Modifier svn ignorer le dossier

svn propedit svn:ignore .

Ajoutez deux lignes simples avec juste ce qui suit:

folderToIgnore
fileToIgnore2.txt

Vérifiez quels fichiers seront téléchargés et validés:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"
mud1e
la source
1
Merci, exactement ce dont j'avais besoin. Il semble qu'il ne soit revenu qu'à l'opération «ajouter», sans toucher au contenu du fichier lui-même. J'avais peur de perdre les modifications locales comme indiqué dans les réponses précédentes, mais il semble qu'aucun fichier n'ait été endommagé.
Peter M. - représente Monica
1

Pour les fichiers - svn revert filename

Pour les dossiers - svn revert -R folder

Arvind singh
la source
4
Non! Revert n'est pas sûr, car il perd tous les changements locaux
jpaugh