Comment append tous les nouveaux fichiers à SVN?

J’utilise un ORM qui génère de grandes quantités de fichiers à partir d’une interface de ligne de commande. Existe-t-il un moyen simple d’exécuter svn add sur tous les fichiers d’un répertoire qui apparaissent comme ? quand je lance svn status ?

Modifier Ces fichiers existent dans une arborescence de répertoires, donc l’ajout de * pour un répertoire ne fonctionnera pas.

vous pouvez simplement faire un svn add path/to/dir/* vous serez averti de tout ce qui existe déjà dans le contrôle de version mais cela appenda tout ce qui ne l’est pas.

Cela appenda tous les fichiers inconnus (sauf ignorés) sous l’arborescence de répertoires spécifiée:

 svn add --force path/to/dir 

Cela va append tous les fichiers inconnus (sauf ignoré) dans le répertoire actuel et ci-dessous:

 svn add --force . 

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

Celles-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 vues sur aucune des autres réponses que j’ai vues.

append:

 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 souhaitez conserver vos fichiers ignorés, sinon tout ce qui a été ignoré sera ajouté à nouveau.

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

Tiré de quelque part sur le web, mais je l’utilise depuis un certain temps et cela fonctionne bien.

Si svn add whatever/directory/* ne fonctionne pas, vous pouvez le faire de la manière la plus 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 soit différent sur mon système – ajustez-le simplement).

Vous devriez pouvoir courir:

 svn add * 

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

Vous voudrez peut-être réfléchir à la question de savoir si vous voulez vraiment append 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 il faut y penser.

 svn add * 

devrait faire le travail Assurez-vous simplement de:

 svn commit 

ensuite 🙂

Dans certains coquillages comme le poisson, vous pouvez utiliser le ** globbing pour faire cela:

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

Ceci était basé sur la réponse de Markb ... et une petite chasse sur Internet. Il a l'air moche, mais il semble fonctionner pour moi sur OS X (y compris les fichiers avec des espaces).

Cela ajoute tous les fichiers non versionnés même s’ils contiennent des espaces

svn status | awk ‘{$ 1 = “”; imprimer $ 0} ‘| xargs -i svn add “{}”

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

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

Parmi les bash one-liner, je pense que c’est la plus jolie:

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

Il appenda tous les nouveaux fichiers et supprimera tous les fichiers manquants. Utilisez avec prudence, définissez éventuellement un alias pour un access rapide.

REMARQUE pour les Macs: dans xargs -r est une extension GNU: elle pourrait ne pas être supscope. Dans ce cas, supprimez-le et ignorez les avertissements lorsqu’il n’y a aucun fichier à append ou à supprimer.

Je suis un débutant au contrôle de version svn. Cependant, pour le cas où les gens voudraient append des fichiers sans ignorer les propriétés déjà définies: ignorez, j’ai résolu le problème comme ci-dessous.

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

Les étapes ci-dessus ont fonctionné.