|
Wenn man SVN von der Kommandozeile aus benutzt kann es ziemlich aufwendig werden eine große Menge an neuen Dateien, die sich auch noch schön gleichmäßig über die Dateistruktur verteilen unter Versionskontrolle zu stellen. Die erste Idee einfach alle Dateien mit svn add . dem Repository hinzuzufügen, wird mit der Meldung, dass sich das aktuelle Verzeichnis bereits unter Versionskontrolle befindet beantwortet. Und so bleibt einem scheinbar nur die Möglichkeit jedes neue Verzeichnis einzeln hinzuzufügen. Von diesem kurzen Blog-Eintrag wurde ich allerdings eines Besseren belehrt. Ein Aufruf von svn st zeigt einem ja eigentlich alle Dateien an, die noch nicht unter Versionskontrolle stehen, da macht es doch Sinn diese Ausgabe zu nutzen. Allerdings findet man dort auch noch alle möglichen anderen Dateien, die beispielsweise geändert worden sind. Um diese Dateien los zu werden filtern wir die Ausgabe mit grep: svn st | grep ^? Hier weisen wir grep an uns nur die Zeilen auszugeben, die mit einem ? beginnen (Das Zeichen "^" bedeutet so viel wie "beginnt mit").
Jetzt haben wir es schon fast geschafft, allerdings stört das "?" am Anfang der Zeilen noch. Mit einem Aufruf von cut, das ausgewählte Teile einer Eingabe wieder ausgibt, werden wir es aber einfach wieder los: svn st | grep ^? | cut -b7- Das Argument "-b7-" bewirkt, dass alle bytes ("-b") in der angegebenen Liste ("7-" = "von Byte 7 bis zum Ende") ausgegeben werden. Dadurch werden alle Statusangaben der Datei entfernt. Das Ganze müssen wir nun eigentlich nur noch an SVN übergeben. Dies geschieht über xargs und wir erhalten als finale Version: svn st | grep ^? | cut -b7- | xargs -r svn add Der Parameter "-r" sorgt für eine bessere Verwendbarkeit des Befehls in Skripten. Konkret weist er xargs an im Falle einer leeren Eingabe den Befehl erst gar nicht auszuführen, da dies zu einer Fehlermeldung führt. Will man alle physikalisch gelöschten Dateien auch im Repository löschen, so kann man dies mit folgender leicht modifizierten Variante erledigen: svn st | grep ^! | cut -b7- | xargs -r svn delete |