2009-11-19 5 views
21

J'essaie d'ajouter récursivement des propriétés à tous les fichiers avec un caractère générique.svn propset récursif

structure de fichier comme ci-dessous

D:>dir *.bob /s/b 
D:\Source\key-test\test.bob 
D:\Source\key-test\test2.bob 
D:\Source\key-test\sub\test3.bob 

propriétés jusqu'à présent (aucun)

D:>svn propget svn:keywords -R *.bob 

essayer un ensemble récursif (note test3.bob est manquante)

D:>svn propset svn:keywords "Author HeadURL Id Revision" -R *.bob 
property 'svn:keywords' set on 'test.bob' 
property 'svn:keywords' set on 'test2.bob' 

changement de sous et assurez-vous que nous pouvons définir le prop (ok)

D:>cd sub 
D:>svn propset svn:keywords "Author HeadURL Id Revision" -R *.bob 
property 'svn:keywords' set on 'test3.bob' 

Tout le monde sait ce qui est avec R, j'ai aussi essayé --recursive?

Cheers,

adam

D:>svn --version 
svn, version 1.6.6 (SlikSvn:tag/[email protected]) WIN32 
    compiled Nov 3 2009, 15:31:43 

Répondre

7

Étant donné qu'il ya une ambiguïté sur les docs pour ce que R fait (ou ne fait pas) comme l'a souligné Gonzalo Je l'ai utilisé ce fichier de commandes au lieu d'essayer d'obtenir svn faire ce que je veux

D:>type applyProps.cmd 
@echo off 
for /r . %%X in (*.bob) do (
svn propset svn:keywords "Author Id HeadURL Revision" "%%X" 
) 
11

De svn help propset:

svn: mots-clés, svn: exécutable, svn: eol-style, svn: mime type et
svn: les propriétés needs-lock ne peuvent pas être définies dans un répertoire. Une tentative non récursive
échouera et une tentative récursive définira la propriété uniquement sur le fichier enfants du répertoire.

+0

Voulez-vous dire que, malgré l'aide liste -R comme une option valable, le paragraphe ci-dessus _A tentative récursif définir la propriété que sur les enfants de fichiers du Directory_ remplace ce et R est donc ou non valable? –

+5

Oui, c'est ce que je comprends de l'aide. En * nix, vous pouvez utiliser 'find. -name \ *. bob | xargs svn propset .... 'réaliser ce que vous voulez, mais aucune idée de comment le faire sur Windows sans cygwin. – Gonzalo

19

En fait, R est récursif. Par exemple:

svn propset svn:eol-style 'LF' -R * 

Cela fonctionnera également sur tous les sous-dossiers. Cependant:

svn propset svn:eol-style 'LF' -R *.php 

... ne fonctionnera que sur les fichiers php dans le dossier actuel, quel que soit le -R. Ajout:

svn propset svn:eol-style 'LF' -R */*.php 

Fonctionne sur les sous-dossiers de niveau inférieur. Ajouter supplémentaire/-s ira un autre niveau et ainsi de suite ...

Je ne sais pas vraiment comment spécifier (ou si c'est même possible de le faire) qu'il devrait être filtré sur la base du nom de fichier ET récursif . Quoi qu'il en soit, expérimenter ne peut pas nuire, puisque les modifications sont locales et peuvent toujours être rejetées en retournant ...

1

Si votre répertoire de travail est sous UNIX, vous pouvez également essayer cette commande.Il fonctionne pour moi:

svn propset svn:keywords "Id" `du -a | cut -f 2 | grep -v "\.svn" | grep "\.bob$" | sed "s/ /[[:space:]]/g"`