2010-03-12 6 views
1

J'essaieSVN: Ajouter des fichiers de manière récurrente?

svn add *.py --force 

Comme le documentation suggests, mais je sais pertinemment qu'il est des fichiers manquants imbriqués dans des dossiers plus profonds. Pourquoi?

Existe-t-il un moyen standard de le faire avec d'autres commandes Unix? */*.py va taper quelques fichiers de plus, mais c'est un peu difficile de faire ça pour toutes les profondeurs possibles.

Répondre

3

La commande find est l'astuce pour extraire les fichiers que vous voulez.

find . -name "*.py" -exec svn add --parents {} ';' 

Et il y a environ un million de façons de le faire, qui sont tous éducatifs.

# if you want to make sure you don't find files in your .svn directories 
find . -name .svn -prune -o -name "*.py" -exec svn add --parents {} ';' 

# execs svn only once; probably a bit faster. 
# -print0 and -0 avoid problems if files have spaces in names 
find . -name .svn -prune -o -name "*.py" -print0 | xargs -0 svn add --parents 
2

Comme l'autre personne a noté avec la commande find J'utilise svn status. Utilisé comme tel

>svn status 
?  private/Config.my.php 
?  private/log/word_failure 
?  private/log/db_err_log.txt 
?  private/import/client2 
M  public/reports/ReadyForMeeting.report.php 
?  public/tools/Connection.class.php.good 
M  public/tools/FieldNode.class.php 
M  public/tools/PageBuilderForm.class.php 
M  public/domain/Report_Setup_Parameter.class.php 
M  public/domain/Report_Setup_Page.class.php 
M  public/modules/mAdmin/mManageUsers.module.php 
M  public/modules/mAdmin.module.php 
M  public/modules/mAppraiserSetup.module.php 
?  public/js/firebug-lite.js 
?  public/js/lang_en-us.js 
?  public/js/_composite.js 
?  public/js/lang_en.js 
M  public/js/uniValidate.js 

Ahh voir tous ceux avec un statut de? cela signifie qu'ils sont dans le système de fichiers mais pas commis. Par conséquent, j'ajoute tous les fichiers php comme ça.

> svn status | grep ^\? | awk '{ print $2 }' | grep .*php$ | xargs svn add 

Ou Si je voulais ajouter python php et les fichiers js cela fonctionne

> svn status | grep ^\? | awk '{ print $2 }' | egrep ".*php$|.*py$|.*js$" | xargs svn add 

'svn status' serait alors la meilleure réponse à moi. De cette façon, seul ce qui n'a pas été ajouté au repo sera sélectionné.
Tout aussi souvent cependant, ce que je fais est juste de passer par et supprimer ce que je ne veux pas dans le repo (pourquoi est-il là) et puis j'exécute, obtenant ainsi toutes les images auxiliaires et autres. Find est une bonne solution aussi, cela nécessite juste moins de réflexion. Et n'est également pas aussi avide. De plus, si vous êtes sur Windows alors une variante de cela fonctionnerait. A savoir prendre la sortie de svn status et hacker un court fichier batch.
Bonne chance!

+1

C'est assez cool, mais que faire si le dossier n'est pas versionné? Il a ignoré un dossier entièrement nouveau que j'avais. – mpen

+0

Je dois dire que cela me surprend. L'expression régulière doit être modifiée pour inclure également les répertoires nus. Je ne vois pas vraiment de moyen évident de le faire, vous pouvez me débarrasser du filtre regex. Je pense qu'à la fin de la journée il n'y a pas de substitut à une bonne vieille attention :) – flaxeater

+0

Je ne pense pas que ce soit le filtre regex ... assez sûr que 'svn status' ne liste pas les répertoires non versionnés. – mpen

0
find . ! -wholename ./settings.py | grep -P ".*\.(py|html)$" | xargs -d "\n" svn add 
Questions connexes