Je suppose que j'ai été négligent.
J'ai ajouté une série de fichiers à svn avec svn add
, , Puis j'ai vu quelques fichiers ajoutés que je ne voulais pas, alors je les ai supprimés avec rm
.
Maintenant, je ne peux plus valider car il manque des fichiers dans la validation. J'ai essayé svn cleanup mais ça n'a pas aidé.
Mon option de travail est maintenant de supprimer manuellement tous les répertoires .svn mais cela semble faux.
Si je comprends bien vous avez cette situation:
$ touch foo
$ svn add foo
A foo
$ rm foo
$ svn ci
svn: Commit failed (details follow):
svn: 'foo' is scheduled for addition, but is missing
Donc, pour résoudre ce problème, procédez comme suit: (merci Linus!)
$ svn revert foo
Reverted 'foo'
ou vous pouvez faire ceci:
$ touch foo
$ svn delete --force foo
pour chaque fichier, et vous devriez pouvoir vous enregistrer sans problèmes.
Si vous avez ajouté un dossier avec des sous-dossiers et des fichiers dans , Vous l'avez supprimé avant de le valider. Dans ce cas, procédez comme suit.
$ svn revert <Deleted Folder Name> --depth infinity
Ceci est en fait une version légèrement modifiée de @Gonzalo Mateo, ce qui a résolu mon problème.
svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity
Si vous avez plusieurs répertoires avec plusieurs fichiers supprimés, la commande suivante pourrait vous aider:
svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert
Je recommande d'abord de lister les fichiers qui vont être annulés. Nous pouvons le faire en supprimant le dernier tuyau: svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/'
.
Explication de la commande étape par étape:
svn st
- Il répertorie les fichiers ajoutés et supprimés de manière abusive fichiers avec le symbole !M
grep '!M'
Il trouve les lignes avec !M
sed 's/!M \(.*\)$/"\1"/'
Ceci est utilisé pour se débarrasser du !M
avec les espaces. Il indiquera également les noms de fichiers afin que vous n'ayez pas à vous inquiéter si les fichiers contiennent des espaces.xargs svn revert
Ceci annulera tous les fichiers listés.Si vous svn add X
un fichier, mais que vous n'avez pas validé, vous décidez plus tard de supprimer ce fichier (et non de le valider); vous devriez simplement annuler votre commande svn add X
avec svn revert X
.
Il sera ensuite "annuler" l'ajout non encore engagé.
Cela a résolu mon problème
svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity
Notez que le code ci-dessus ne fonctionne que pour les derniers ajouts. Alors, faites un autre svn ci
s'il donne une erreur, puis réexécutez le code ci-dessus. Puis à nouveau svn ci
jusqu'à ce que vous ayez annulé chaque problème.
Bonus: Ajouter un alias (ceci est pour Oh-My-ZSH Zsh Shell)
# SVN revert everything like reset hard
alias sra="svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity"
Maintenant, sra
c'est-à-dire SVN Tout annuler vous facilitera la vie.