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.
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.
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 .
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é.
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.
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
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).
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.
svn add *
devrait faire le travail. Assurez-vous simplement de:
svn commit
ensuite :)
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 "{}"
Dans certains shells comme fish , vous pouvez utiliser le **
globbing pour le faire:
svn add **
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).
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.
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
Les étapes ci-dessus ont fonctionné.
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/^!//' )