it-swarm.com.de

Wie füge ich alle neuen Dateien zu SVN hinzu?

Ich verwende ein ORM, das große Mengen von Dateien aus einer CLI generiert. Gibt es eine einfache Möglichkeit, den svn add für alle Dateien in einem Verzeichnis auszuführen, die beim Ausführen von ? als svn status angezeigt werden?

Edit Diese Dateien sind in einer Verzeichnisstruktur vorhanden, sodass das Hinzufügen von * für ein Verzeichnis nicht funktioniert.

58
Brian

sie können einfach einen svn add path/to/dir/* ausführen. Sie erhalten eine Warnung über alles, was sich bereits in der Versionskontrolle befindet, aber es wird alles hinzugefügt, was nicht der Fall ist.

27
prodigitalson

Dadurch werden alle unbekannten (außer ignorierten) Dateien unter der angegebenen Verzeichnisstruktur hinzugefügt:

svn add --force path/to/dir

Dadurch werden alle unbekannten (außer ignorierten) Dateien im aktuellen Verzeichnis und darunter hinzugefügt:

svn add --force .
126
janos

Als Referenz dienen diesesind sehr ähnliche Fragen.

Diese scheinen für mich am besten zu funktionieren. Sie arbeiten auch mit Leerzeichen und fügen ignorierte Dateien nicht erneut hinzu. Ich habe sie in keiner der anderen Antworten aufgelistet, die ich gesehen habe.

hinzufügen:

svn st | grep ^? | sed 's/?    //' | xargs svn add

entfernen:

svn st | grep ^! | sed 's/!    //' | xargs svn rm

Bearbeiten: Es ist wichtig, "add *" NICHT zu verwenden, wenn Sie Ihre ignorierten Dateien behalten möchten. Andernfalls wird alles, was ignoriert wurde, erneut hinzugefügt.

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

Von irgendwo im Internet genommen, aber ich benutze es schon eine Weile und es funktioniert gut.

8
markb

Wenn svn add whatever/directory/* nicht funktioniert, können Sie es auf schwierige Weise tun:

svn st | grep ^\? | cut -c 2- | xargs svn add
5
Carl Norum

Die Lösung

svn status | grep ^? | sed 's/?    //' | xargs svn add

funktioniert nicht mit Whitespaces. Stattdessen kann man verwenden

svn status | grep ^? | sed 's/^?       //' | xargs -I fn svn add "fn"

(Anscheinend unterscheidet sich die Anzahl der führenden Leerzeichen auf meinem System - passen Sie sie einfach an).

4
Stefan Witzel

Du solltest laufen können:

svn add *

Es kann sich über die Dateien beschweren, die bereits unter Versionskontrolle stehen, aber es werden auch die neuen hinzugefügt.

Möglicherweise möchten Sie jedoch darüber nachdenken, ob Sie diese generierten Dateien wirklich der Versionskontrolle hinzufügen möchten. Sie können als abgeleitete Artefakte betrachtet werden, ähnlich wie der kompilierte Code, und sollten daher nicht hinzugefügt werden. Natürlich liegt es an Ihnen, aber darüber nachzudenken.

3
pkaeding
svn add *

sollte die Arbeit machen. Stellen Sie einfach sicher, dass Sie:

svn commit

danach :)

3
ryanprayogo

Dadurch werden alle nicht versionierten Dateien hinzugefügt, auch wenn sie Leerzeichen enthalten

svn status | awk '{$ 1 = ""; print $ 0} '| xargs -i svn add "{}"

1
Bharath_145

In einigen Shells wie fish können Sie das **-Globbing dazu verwenden:

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

Dies beruhte auf der Antwort von Markb ... und einer kleinen Jagd im Internet. Es sieht hässlich aus, aber es scheint für mich unter OS X (einschließlich Dateien mit Leerzeichen) zu funktionieren.

1
Ron

Ich denke, unter bash one-liner ist dies das schönste:

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

Es werden alle neuen Dateien hinzugefügt und alle fehlenden Dateien gelöscht. Mit Vorsicht verwenden, möglicherweise einen Alias ​​für den schnellen Zugriff festlegen.

HINWEIS für Macs: In xargs ist -r eine Erweiterung von GNU: Sie wird möglicherweise nicht unterstützt. In diesem Fall einfach entfernen und Warnungen ignorieren, wenn keine Dateien zum Hinzufügen oder Löschen vorhanden sind

0
Andrea Ratto

Ich bin ein Neuling in der svn-Versionskontrolle. Für den Fall, dass Leute Dateien hinzufügen möchten, ohne die bereits festgelegten Eigenschaften von svn: ignore zu ignorieren, habe ich das Problem wie folgt gelöst

  1. svn add --depth leerer Pfad/zum Verzeichnis /
  2. Führen Sie "svn propset svn: ignore -F ignoreList.txt --recursive" an der Stelle aus, an der sich die ignoreList.txt befindet. In meinem Fall befand sich diese Datei zwei Verzeichnisse über dem "Pfad/zum/Verzeichnis", das ich hinzufügen wollte. Beachten Sie, dass ignoreList.txt die Dateierweiterungen enthält, die svn ignorieren soll, z. * .aux usw.
  3. svn add --force pfad/zu/verzeichnis /. 

Die obigen Schritte haben funktioniert.

0

Ich mag diese Befehle, da sie svn status verwenden, um die neuen oder fehlenden Dateien zu finden, was Dateien berücksichtigt, die ignoriert werden. 

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

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