Wie sehen Sie die letzten SVN-Protokolleinträge?


194

Durch das Tippen svn logwird eine unglaublich lange, nutzlose Liste in einer Befehlszeile ausgegeben. Ich habe keine Ahnung, warum das die Standardeinstellung ist. Wenn ich 300 Einträge auf dem Terminal lesen wollte (oder sogar lesen konnte), hätte ich nichts dagegen, svn log --fulletwas zu tippen oder ähnliches.

Vielleicht denken die SVN-Leute, ich wollte diese Ausgabe einem anderen Programm zuführen. Wenn dies jedoch der Fall ist, wäre es sinnvoller, den ausführlicheren Aufruf für das Programm zu haben - nicht für den Terminalbenutzer.

Wie sehe ich nur einige aktuelle Aktivitäten wie die letzten 5 oder 10 Einträge, um zu sehen, was sich geändert hat?


9
Ja, es sollte wirklich so funktionieren, ähm , git log.
Paul Draper

Antworten:


261

limit Option, zB:

svn log --limit 4

svn log -l 4

Nur die letzten 4 Einträge


127

Neben dem, was Bert F gesagt hat , haben viele Befehle, einschließlich, logdie Option -r(oder --revision). Im Folgenden finden Sie einige praktische Beispiele für die Verwendung dieser Option, um Revisionsbereiche anzuzeigen:

So listen Sie alles in aufsteigender Reihenfolge auf:

svn log -r 1:HEAD

So listen Sie alles in absteigender Reihenfolge auf:

svn log -r HEAD:1

So listen Sie alles vom dreizehnten bis zur Basis der aktuell ausgecheckten Revision in aufsteigender Reihenfolge auf:

svn log -r 13:BASE

Um alles zwischen den angegebenen Daten zu erhalten:

svn log -r {2011-02-02}:{2011-02-03}

Sie können alle oben genannten Ausdrücke mit der --limitOption kombinieren , so dass Sie eine recht detaillierte Kontrolle darüber haben, was gedruckt wird. Weitere Informationen zu diesen -rAusdrücken finden Sie svn help logim entsprechenden Kapitel im Buch Versionskontrolle mit Subversion


8
Vielen Dank für diese Erklärung, @Daniel Dinnyes - Ich habe oft das gegenteilige Problem aus dem OP: svn log .kann nur die früheste Revision für mich zurückgeben (ebenfalls mit svn log --limit 4 .); aber wenn ich anrufe svn log -r HEAD:1 ., bekomme ich endlich alle Einträge aufgelistet ... Nochmals vielen Dank - Prost!
Sdaau

Dies ist besser, da svn log nur der Änderungsverlauf des aktuellen Pfads angezeigt wird.
Ninja

41

Ich benutze gerne -vfür den ausführlichen Modus.
Sie erhalten die Commit-ID, Kommentare und alle betroffenen Dateien.

svn log -v --limit 4

Beispiel für die Ausgabe:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths: 
A /trunk/java/App/src/database/support    
A /trunk/java/App/src/database/support/MIGRATE    
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml

2
Die ausführliche Option ist äußerst nützlich
Jason George

Und wenn das Entwicklerteam wirklich süß ist, wird die Problem-ID in den SVN-Kommentar eingefügt, und Sie können das mit dem Commit verbundene Problem leicht finden.
Jonas Söderström

11

Leiten Sie die Ausgabe durch lessoder einen anderen Pager:

svn log | less

1
Wenn Sie> 23.000 Revisionen haben, warten Sie noch ca. 20 Sekunden, bis die ersten Einträge angezeigt werden (und wenn Sie kein ausführliches Protokoll verwenden). Aber es ist schön - zeigt die neuesten an der Spitze. Und besser als das 100-malige Paging von TortoiseSVN! Wenn Sie weiter zurück wollen.
Tomasz Gandor

6

Falls sich jemand diese alte Frage ansieht, ein praktischer Befehl, um die Änderungen seit Ihrem letzten Update anzuzeigen:

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE (danke Gary für den Kommentar)
dasselbe, aber viel kürzer und logischer:

svn log -r BASE:HEAD -v


8
oder einfachsvn log -r BASE:HEAD -v
Gary

5

Um das zu ergänzen, was andere gesagt haben, können Sie auch einen Alias ​​in Ihrer .bashrc- oder .bash_aliases-Datei erstellen:

alias svnlog='svn log -l 30 | less'

oder was auch immer Sie als Standard wollen


4

Wie Sie bereits bemerkt haben, zeigt der svn logBefehl ohne Argumente alle an Log - Meldungen, die auf die URL , die Sie Ordner angeben oder auf die Arbeitskopie beziehen , wo Sie den Befehl ausführen.

Sie können die svn logErgebnisse jederzeit verfeinern / einschränken :

  • svn log --limit NUM zeigt nur die erste Anzahl von Revisionen an,
  • svn log --revision REV1(:REV2) zeigt die Protokollmeldung für die REV1-Revision oder für den Bereich REV1 - REV2 an.
  • svn log --searchzeigt Revisionen an, die dem von Ihnen angegebenen Suchmuster entsprechen (der Befehl ist in Subversion 1.8 und einem neueren Client verfügbar). Sie können nach suchen
    • Autor der Revision (dh Benutzername des Committers),
    • Datum, an dem die Revision festgeschrieben wurde,
    • Überarbeitungskommentartext (Protokollnachricht),
    • Liste der in der Revision geänderten Pfade.

4

Diese Antwort richtet sich an weitere Fragen zu Subversion-Unterbefehlsoptionen. Für jeden verfügbaren Unterbefehl (dh Hinzufügen, Protokollieren, Status ...) können Sie einfach die --helpOption hinzufügen , um die vollständige Liste der verfügbaren Optionen anzuzeigen, die Sie mit Ihrem Unterbefehl verwenden können, sowie Beispiele für deren Verwendung. Das folgende Snippet stammt direkt aus der svn log --helpBefehlsausgabe im Abschnitt "Beispiele":

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -v

3

Das SVN-Protokoll ist jedoch immer noch in umgekehrter Reihenfolge, dh die neuesten Einträge werden zuerst ausgegeben, indem sie von der Oberseite meines Terminals gescrollt und verschwunden sind. Ich möchte wirklich sehen die letzten Einträge, dh die Sortierreihenfolge chronologisch sein muss. Der einzige Befehl, der dies tut, scheint zu sein, svn log -r 1:HEADaber das dauert in einem Repository mit etwa 10000 Einträgen viel zu lange. Ich habe mir das hier ausgedacht:

Zeigen Sie die letzten 10 Subversion-Einträge in chronologischer Reihenfolge an:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.