web-dev-qa-db-fra.com

Comment puis-je ajouter tous les nouveaux fichiers à SVN

J'utilise un ORM qui génère de grandes quantités de fichiers à partir d'un CLI. Existe-t-il un moyen simple d'exécuter le svn add sur tous les fichiers d'un répertoire qui apparaissent sous la forme ? lorsque j'exécute svn status?

Edit Ces fichiers existent dans une arborescence de répertoires. L'ajout de * à un répertoire ne fonctionnera donc pas.

58
Brian

vous pouvez simplement faire un svn add path/to/dir/* qui vous avertira de tout ce qui se trouve déjà dans le contrôle de version mais il ajoutera tout ce qui ne l’est pas.

27
prodigitalson

Ceci ajoutera tous les fichiers inconnus (sauf les fichiers ignorés) dans l’arborescence de répertoires spécifiée:

svn add --force path/to/dir

Ceci ajoutera tous les fichiers inconnus (sauf les fichiers ignorés) dans le répertoire actuel et en dessous:

svn add --force .
126
janos

Pour référence, cessont des questions très similaires.

Ceux-ci semblent fonctionner le mieux pour moi. Ils fonctionnent également avec des espaces et ne rajoutent pas de fichiers ignorés. Je ne les ai pas vus énumérés dans aucune des réponses que j'ai vues.

ajouter:

svn st | grep ^? | sed 's/?    //' | xargs svn add

enlever:

svn st | grep ^! | sed 's/!    //' | xargs svn rm

Edit: Il est important de NE PAS utiliser "add *" si vous voulez conserver vos fichiers ignorés, sinon tout ce qui a été ignoré sera rajouté.

63
phazei
svn status | grep "^\?" | awk '{print $2}' | xargs svn add

Pris quelque part sur le Web, mais je l'utilise depuis un moment et cela fonctionne bien.

8
markb

Si svn add whatever/directory/* ne fonctionne pas, vous pouvez le faire de manière difficile:

svn st | grep ^\? | cut -c 2- | xargs svn add
5
Carl Norum

La solution

svn status | grep ^? | sed 's/?    //' | xargs svn add

ne fonctionne pas avec les espaces blancs. Au lieu de cela on peut utiliser

svn status | grep ^? | sed 's/^?       //' | xargs -I fn svn add "fn"

(Il semble que le nombre de blancs vides est différent sur mon système - ajustez-le simplement).

4
Stefan Witzel

Vous devriez pouvoir courir:

svn add *

Il peut se plaindre des fichiers déjà sous contrôle de version, mais il ajoutera également les nouveaux.

Cependant, vous voudrez peut-être savoir si vous voulez vraiment ajouter ces fichiers générés au contrôle de version. Ils pourraient être considérés comme des artefacts dérivés, un peu comme le code compilé, et ne devraient donc pas être ajoutés. Bien sûr, cela dépend de vous, mais c’est un sujet de réflexion.

3
pkaeding
svn add *

devrait faire le travail. Assurez-vous simplement de:

svn commit

ensuite :)

3
ryanprayogo

Ceci ajoute tous les fichiers non versionnés même s'il contient des espaces

svn status | awk '{$ 1 = ""; print $ 0} '| xargs -i svn add "{}"

1
Bharath_145

Dans certains shells comme fish , vous pouvez utiliser le ** globbing pour le faire:

svn add **
1
Michael
svn status | grep "^\?" | awk '{ printf("\""); for (f=2; f <= NF; f++) { printf("%s", $f); if (f<NF) printf(" "); } printf("\"\n");}' | xargs svn add

Ceci était basé sur la réponse de markb ... et un peu de chasse sur Internet. Cela semble moche, mais cela semble fonctionner pour moi sur OS X (y compris les fichiers avec des espaces).

1
Ron

Je pense que, parmi les bash-one-liner, c’est la plus jolie:

svn status | tee >(awk '/^?/{print $2}' | xargs -r svn add >&2) | awk '/^!/{print $2}' | xargs -r svn delete

Il va ajouter tous les nouveaux fichiers et supprimer tous les fichiers manquants. Utilisez avec précaution, éventuellement définir un alias pour un accès rapide.

REMARQUE pour les Mac: dans xargs, -r est une extension GNU: il est possible qu'il ne soit pas pris en charge. Dans ce cas, supprimez-le et ignorez les avertissements lorsqu'il n'y a aucun fichier à ajouter ou à supprimer.

0
Andrea Ratto

Je suis un débutant à svn contrôle de version. Cependant, dans le cas où les gens veulent ajouter des fichiers sans ignorer les propriétés déjà définies de svn: ignore, j'ai résolu le problème comme ci-dessous

  1. svn add --depth chemin vide/dans/répertoire
  2. Exécutez "svn propset svn: ignore -F ignoreList.txt --recursive" à partir de l'emplacement où réside ignoreList.txt. Dans mon cas, ce fichier résidait dans deux répertoires au-dessus du "chemin/vers/répertoire", que je voulais ajouter. Notez que ignoreList.txt contient les extensions de fichier que je veux que svn ignore, par exemple. * .aux etc.
  3. svn add --force path/to/directory /. 

Les étapes ci-dessus ont fonctionné.

0
Deepak Tunuguntla

J'aime ces commandes car elles utilisent svn status pour trouver les fichiers nouveaux ou manquants, ce qui respecte les fichiers ignorés. 

svn add $( svn status | sed -e '/^?/!d' -e 's/^?//' )

svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )
0
Tristan