web-dev-qa-db-fra.com

Ajoutez des fichiers sur SVN puis supprimez-les avant la validation

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. 

21
Eric

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.

38
patrickmdnet

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
5
Son Tran

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
3
linvenuza

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.
2
Gonzalo Mateo

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

1
Edwin Buck

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.

0
Ahmad Awais