Wie erhalte ich eine Liste aller nicht konvertierten Dateien von SVN?

80

Manchmal entwickeln Sie sich und entscheiden sich für ein Commit, wobei Sie vergessen, dass Sie einige Dateien in Ihrem Projekt erstellt haben. Dann, ein paar Tage später, bekommt Ihr Kumpel Ihren Build aus Subversion und beschwert sich, dass einige Dateien fehlen. Sie erkennen, ah Mist, ich habe vergessen, diese Dateien hinzuzufügen!

Wie kann ich von Subversion eine Liste der Dateien erhalten, die nicht der Versionskontrolle unterliegen, damit ich sicher bin, dass ich alles zum Repository hinzugefügt habe?

Doug T.
quelle

Antworten:

106

Verwenden Sie den svn statusBefehl:

svn status | grep ^?

Dateien, die nicht versioniert sind, sind mit einem? am Anfang der Linie.

Wenn Sie feststellen, dass Sie immer bestimmte Dateien haben, die nicht zum Repository hinzugefügt werden sollten (z. B. generierte Binärdateien), sollten Sie die svn:ignoreEigenschaft im enthaltenen Verzeichnis einrichten, damit diese Dateien bei der Verwendung nicht weiterhin angezeigt werden svn status.

Greg Hewgill
quelle
4
Persönlich habe ich immer "svn diff" vor "svn ci", aber da das manchmal langsam ist, habe ich immer "svn stat" vor "svn diff", was praktisch ist, weil ich dann nicht vergesse, Sachen hinzuzufügen :)
ephemient
10
Wenn Sie viele nicht versionierte Dateien haben, die Sie hinzufügen möchten, gehen Sie folgendermaßen vor: svn st | grep ^? | awk '{print $2} | xargs svn add Dies findet zuerst nicht versionierte Dateien, awk druckt nur das zweite Element in der Zeile (dh den Dateipfad) und xargs macht diesen Pfad zu einem Argument von svn hinzufügen.
Dualität_
7
Am Ende des Befehls awk fehlt ein einfaches Anführungszeichen. Der Befehl sollte sein:svn st | grep ^? | awk '{print $2}' | xargs svn add
jplandrain
46

Wenn einige Dateien ignorezu ihrem Status hinzugefügt wurden, werden sie nicht in angezeigt svn status. Du brauchst:

svn status --no-ignore
Bleater
quelle
1
Auch hilfreich für Binärdateien, die in meinem Setup standardmäßig vom SVN-Status ignoriert werden. Ich kenne wahrscheinlich keine Einstellung, die dies tut, aber die Verwendung von --no-ignore hat mir in diesem Szenario geholfen.
Andy Weinstein
Dies sollte die akzeptierte Antwort sein, da die ausgewählte Antwort in meinem Fall nicht funktionierte (für Binärdateien in einer Linux-Umgebung)
Asqan
15

Wenn Sie unter Windows arbeiten, können Sie mit PowerShell etwas Ähnliches wie Greg Hewgills Antwort tun .

(svn stat) -match '^\?'

Dies kann ziemlich einfach erweitert werden, um alle nicht versionierten und ignorierten Dateien zu finden und zu löschen.

(svn stat "--no-ignore") -match '^[I?]' -replace '^.\s+','' | rm

Hoffe das ist hilfreich für jemanden!

Damian Powell
quelle
1
Wie heißt das () -math?
Pavel Petrov
11

Oder über die Windows-Befehlszeile:

svn stat | find "?"
Crig
quelle
1

Mit diesem Befehl können Sie alle Pfade für nicht versionierte Dateien auflisten:

svn status | awk '/^?/ {print $2}'

Der erste Teil führt eine aus svn statusund leitet dann die Ausgabe an AWK um, wodurch ein einfacher Filter "Das erste Zeichen sollte '?'" Ausgeführt wird. Anschließend wird der zweite Parameter "Der Dateipfad" gedruckt.

svn statusignoriert immer keine ignorierten Dateien. Sie können eine Datei oder einen Pfad hinzufügen, indem Sie diesen Pfad mit hinzufügen

svn propset svn:ignore "PATH OR PATERN"
user2710797
quelle
Dies scheint alle Ergebnisse zu erhalten svn status, nicht nur nicht versionierte Dateien. Ich glaube, der Befehl sollte sein, dem svn status | awk '/^\?/ {print $2}'zu entkommen ?, da der Filter ein regulärer Ausdruck ist.
KymikoLoco