2009-11-19 8 views
21

Ich versuche, Eigenschaften zu allen Dateien mit einem Platzhalter rekursiv hinzuzufügen.Recursive Svn Propset

Dateistruktur wie unten

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

Eigenschaften bisher (keine)

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

versuchen, eine rekursive Satz (Anmerkung test3.bob fehlt)

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' 

Veränderung Unter und stellen Sie sicher, dass wir die Stütze setzen können (ok)

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

Wer weiß, was mit -R ist oben, habe ich versucht, auch --recursive?

Cheers,

adam

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

Antwort

7

Da es für Zweideutigkeit über die Dokumentation ist, was -R tut (oder nicht tun), wie von Gonzalo habe diese Batch-Datei zu erhalten SVN zu tun, anstatt ich darauf hinwies, verwendet versuchen, was ich will

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

Von svn help propset:

Die svn: keywords, svn: executable, svn: eol-style, svn: mime-type und
svn: Needs-Lock-Eigenschaften können nicht in einem Verzeichnis festgelegt werden. Ein nicht rekursiver
Versuch wird fehlschlagen, und ein rekursiver Versuch wird die Eigenschaft nur für die untergeordneten Dateien des Verzeichnisses festlegen.

+0

Wollen Sie damit sagen, dass trotz der Hilfe -R als gültige Option Auflistung, der obige Absatz _a rekursive Versuch wird die Eigenschaft nur auf der Datei Kindern der Directory_ gesetzt überschreibt diese und -R deshalb oder nicht gültig? –

+5

Ja, das entnehme ich der Hilfe. In * nix könntest du 'finden. -name \ *. bob | xargs svn propset .... 'um zu erreichen, was Sie wollen, aber keine Ahnung, wie das auf Windows ohne Cygwin zu tun. – Gonzalo

19

Eigentlich ist -R rekursiv. Zum Beispiel:

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

Dies funktioniert auch auf alle Unterordner. Jedoch:

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

... wird nur auf PHP-Dateien innerhalb des aktuellen Ordners arbeiten, unabhängig von der -R. Hinzufügen:

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

Arbeitet auf Unterordner eine Ebene nach unten. Hinzufügen von extra/-s wird eine andere Ebene und so weiter gehen ...

Ich bin wirklich nicht sicher, wie zu spezifizieren (oder wenn es sogar möglich ist), dass es basierend auf Dateinamen UND rekursiv gefiltert werden sollte . Ungeachtet dessen kann das Experimentieren nicht schaden, da die Änderungen lokal sind und immer durch Zurücksetzen verworfen werden können.

1

Wenn Ihr Arbeitsverzeichnis unter UNIX ist, können Sie diesen Befehl auch versuchen.Es funktioniert für mich:

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