9 Stimmen

SVN: Wie kann ich alle Dateien in einer Änderungsliste in Subversion auflisten?

Wie kann man eine Liste von Dateien in einer SVN-Änderungsliste mit KEINER Information außer der Dateiliste erhalten?

Ich möchte eine Auflistung von Dateien in einer Changelist in einem Format, das ich in Bash $() verwenden können. Ich beginne mit svn st --cl 3011 , das die Dateien auflistet, aber mit einer Menge zusätzlichen Mülls:

Status des externen Postens bei 'foo' durchführen

? foo/bar

Status des externen Postens 'foo/bar' durchführen

--- Changelist '3011':

M src/math/math.cc

A src/math/determinant.cc

A src/math/determinant.h

M src/math/matrix.h

Das ist eine Menge an Informationen, die sed oder awk analysieren sollen, und ich habe Angst, dass ich es vermassle und am Ende eine Datei in der Änderungsliste übersehe oder etwas hinzufüge, das nicht in der Änderungsliste steht. -q hilft nicht viel.

Gibt es eine Möglichkeit, svn dazu zu bringen, mir einfach src/math/math.cc src/math/determinant.cc src/math/determinant.h src/math/matrix.h ?

Danke! Ian

6voto

user1633977 Punkte 101

Das reicht aus:

svn st --changelist 3011 | grep -v Changelist | cut -b 3-

svn st --changelist gibt den Namen der Änderungsliste sowie den Status der Dateien und die Dateinamen aus:

--- Changelist 'cl_name':
M       file1
A       file2

Nun bearbeiten Sie diese, indem Sie zuerst die erste Zeile mit "grep -v Changelist" löschen, was die Zeile mit dem Wort Changelist löscht. Dann führen Sie "cut -b 3-" aus, um die ersten paar Zeichen jeder Zeile zu löschen.

Mit dem vollständigen Befehl erhalten Sie:

 file1
 file2

2voto

Jimbo Punkte 24833

Verwenden Sie --ignore-externals und --cl!

Sie brauchen keine externen Tools wie grep o awk . Das ist eigentlich ganz einfach!

Der Befehl --ignore-externals entfernt den ganzen zusätzlichen Müll aus der svn status aufzurufen, und Sie können das leicht mit --cl Parameter zu:

svn st --ignore-externals --cl "Changelist Name"

Dadurch werden alle externen Dateien ignoriert, und Sie erhalten nur die Dateien in der Änderungsliste, nach denen Sie fragen.

1voto

AlG Punkte 14097

Wenn es Ihnen nichts ausmacht, ein Verzeichnis nach dem anderen zu durchsuchen, können Sie dies pro Verzeichnis tun:

svn status lib | awk '{print $2}'

Hier tauschen Sie lib gegen das betreffende Verzeichnis aus.

0voto

pmod Punkte 9810

Soweit ich weiß, gibt es keinen direkten Weg (nur mit svn Argumente) zu tun, was Sie wollen. Sie können sich jedoch auf die Ausgabe von svn stat -v und auf diesem Pfad ab der Position 41. Für Ungeübte reicht der folgende Perl-Einzeiler aus:

perl -e "@st=`svn stat -v -N`;foreach $l (@st){print substr($l,41);}"

Für einen rekursiven Status entfernen Sie einfach -N aus den svn-Argumenten.

Zusätzlich zum Ausdrucken aller Inhalte des Verzeichnisses möchten Sie vielleicht geänderte Dateien, Dateien, die nicht unter svn stehen, nach Revisionen usw. trennen. In diesem Fall können Sie mein obiges Skript leicht abändern, indem Sie die substr(0,1) - das erste Zeichen jeder Ausgabe. Zum Beispiel gibt der folgende Einzeiler nur die Liste der geänderten Dateien aus:

perl -e "@st=`svn stat -v -N`;foreach $l (@st){print substr($l,41) if substr($l,0,1) eq "M";}"

0voto

Hemant Sharma Punkte 141

Svn log -r <Revisionsnummer> -v

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X