Informationen (info, status, log, blame, diff)

Es gibt verschiedene Möglichkeiten, Informationen über Dateien zu erhalten. Lassen wir Bert ins trunk-Verzeichnis wechseln und ihn Informationen suchen.

info

Der Befehl “svn info” kann auf Dateien und Verzeichnisse der lokalen Arbeitskopie, wie auch des Repositorys angewandt werden:

svn info main.c

und gibt folgende Ausgabe für: (FIXME:Bild)Als letzter Autor findet sich grundsätzlich ‚xin‘, da für Subversion der Benutzername ausschlaggebend ist, mit dem man sich bei Subversion anmeldet. „arne“ und „bert“ sind aus Sicht von Subversion lediglich zwei Arbeitskopien des Users ‚xin‘.

Um die Sache zu vereinfachen nehmen wir das einfach mal so hin. Ansonsten müssten wir laufend den Benutzer im Betriebssystem wechseln, oder Subversion über die Parameter „–username“ und „–passwort“ aufklären, welche Persönlichkeit wir gerade annehmen wollen.

status

Der Befehl “svn status” bezieht auf das gesamte Arbeitskopie und gibt rekursiv alle Dateien aus, die sich seitdem letztem Abgleich mit dem Subversion-Server geändert haben (sofern nicht mit –non-recursive gerufen). Der simulierte zweite Entwickler Bert, hat bisher lediglich das Projekt ausgecheckt, also noch nichts verändert. Der Aufruf liefert keine Ausgabe.

Beim ersten Entwickler Arne gibt der gleiche Befehl folgende Ausgabe: (FIXME:Bild) Im überwachten Verzeichnis ‘trunk’ des ersten Entwicklers befindet sich die zuvor kompilierte Datei. Das Fragezeichen sagt aus, dass die Datei nicht zum Repository gehört.

Folgende Kürzel können bei ‚status‘ auftreten:

Zeichen Bedeutung
? nicht unter Versionsverwaltung
A lokal hinzugefügt, aber noch nicht im Repository
C Es besteht ein Konflikt bei dieser Datei
D lokal gelöscht, aber noch im Repository vorhanden
M  lokal verändert

Mit ‘svn status’ lassen sich also Dateien finden, die noch nicht zum Repository gehören. Verwendet man ‘svn status’ vor dem Commit, lässt sich leicht prüfen, ob alle gewünschten Dateien wirklich unter die Kontrolle des Repositorys stehen. Vergisst man Dateien hinzuzufügen, so fehlen diese Dateien auch den Entwicklern, die sich mit einem Update die aktuelle, aber leider unvollständige Headversion herunterladen.

Kombiniert mit grep kann man sich unter der BaSh1) auf Dateien konzentrieren, die noch nicht unter der Versionsverwaltung stehen:

svn status | grep ?

So werden lediglich die Zeilen angezeigt, die ein Fragezeichen enthalten. Da Fragezeichen in Dateinamen eher ungewöhnlich sind, findet grep in erster Linie die Zeilen, die das ‘?’ als Zeichen einer nicht verwalteten Datei ist. Das Ganze lässt sich natürlich auch weiter filtern, z.B. wenn man C-Quelltexte sucht, deren Dateien mit ‘.c’ enden und die noch unter Versionsverwaltung stehen, lassen sich mehrere ‘grep’-Befehle in Reihe verwenden.

svn status | grep ? | grep .c

log

Jede Version, die auf den Server übertragen wird, sollte einen Kommentar über die gemachten Änderungen enthalten. Mit ‚svn log‘ kann man diese Versionsbeschreibungen für eine Datei wieder abrufen: (FIXME:Bild) Das Datum wird dabei zweimal geschrieben, so dass es zum einen leicht maschinenlesbar ist und dahinter mit Wochentag und ausgeschriebenen Monat, um für Menschen verständlicher zu sein.

Ein Log kann sehr lang werden, daher kann man mit der Option -r einen Bereich angeben, aus dem man die Logs ausgegeben haben möchte. „-r 2“ gibt das Log für Revision 2 aus, „-r 1:2“ gibt den Bereich ab Revision 1 bis Revision 2 aus, „svn -r BASE:HEAD log“ alle Änderungen zwischen der Arbeitskopie und der zuletzt hochgeladenen Revision.

Möchte man die Änderungen in absteigender Reihenfolge lesen, so lässt sich auch dies bewerkstelligen: „svn -r HEAD:BASE log“

blame (praise, annotate)

gibt eine Datei aus zusammen mit der Information, wer welche Zeile zuletzt verändert hat. sowie über die Person, die die Änderungen durchgeführt hat. Statt blame kann man auch die Befehlssynonyme praise bzw. annotate verwenden, die die identische Aufgabe erfüllen.

(FIXME:Bild) An dieser Stelle nochmals kurz der Hinweis, dass ‚arne‘ und ‚bert‘ aus Sicht von Subversion lediglich zwei Ordner des Benutzers ‚xin‘ sind.

diff

…gibt die veränderten Zeilen zwischen einzelnen Revisionen aus. Hier können mit dem „–revision“ Parameter die zu vergleichenden Revisionen gewählt werden. Der Befehl wird im kommenden Kapitel ‚Änderungen an den Server‘ etwas ausführlich vorgestellt.

Mit Hilfe von -r (–revision) lassen sich ebenfalls auch Diffs zwischen verschiedenen Revisionen aus dem Repository anzeigen.

1) Bourne Again Shell: unter Linux und MacOS Standard, unter Windows z.B. unter CygWin nachinstallierbar