"SVN-Protokoll" zeigt nicht alle letzten Commits an

72

Hinweis: Dies ist wahrscheinlich ein Kinderspiel für erfahrene SVN-Benutzer, aber es hat mich eine ganze Weile überrascht ... also hoffen wir, dass dies jemandem wie mir hilft!

Nachdem svn logich über die Befehlszeile ausgegeben hatte, bemerkte ich, dass mehrere kürzlich festgeschriebene Nachrichten fehlten. Ich wusste, dass diese Nachrichten korrekt in meinem Repository gespeichert wurden, da sie in meinem SVN-Client (RapidSVN) angezeigt wurden. Ich konnte einfach nicht herausfinden, warum sie mit der Befehlszeilenversion von svn nicht sichtbar waren.

Antwort unten ...

Robguinness
quelle

Antworten:

109

Das Problem hatte mit meinem schlechten Verständnis dessen zu tun, was svn logsich zeigte. Ohne weitere Argumente werden Protokollnachrichten aus der Arbeitskopie des Protokolls ausgegeben, nicht aus dem eigentlichen Repository. Durch die Ausgabe svn updatewird die Arbeitskopie mit dem Repository auf den neuesten Stand gebracht und anschließend svn logwerden alle kürzlich vorgenommenen Commits angezeigt. Duh! ;-);

Robguinness
quelle
6
Sollte nach erfolgreichem Commit nicht so gut svn commitlaufen svn update?
Jatin Kumar
5
Einige Client-Programme tun dies möglicherweise tatsächlich, der eigentliche Befehl "svn commit" jedoch nicht (nach meinem Verständnis). Dies geht aus dem Benutzerhandbuch "Red Bean" ( svnbook.red-bean.com/de/1.7/svn.basic.in-action.html ) hervor: "Eine der Grundregeln von Subversion ist, dass eine" Push "-Aktion ausgeführt wird Dies führt weder zu einem "Pull" noch umgekehrt. Nur weil Sie bereit sind, neue Änderungen an das Repository zu senden, bedeutet dies nicht, dass Sie bereit sind, Änderungen von anderen Personen zu erhalten. " Der Rest des Absatzes erklärt ausführlicher, warum "svn commit" und "svn update" getrennt sind.
Robguinness
Die Versionsnummer gilt für das gesamte SVN-Repository. Angenommen, Ihr Repository enthält mehrere Zweige. show logZeigt nur die Revisionen des Zweigs an, auf denen Ihre Arbeitskopie basiert, nicht jedoch die Revisionen des Trunks und der verbleibenden Zweige. Ich kann dafür auf TortoiseSVN Client bürgen :)
Rakesh N
Etwas, das dies schwierig / seltsam macht, ist, dass zumindest für meine Installation (und mein Repository) svn logmein Passwort erforderlich ist. Also nahm ich an, dass es den Server treffen muss, um das neueste Protokoll zu erhalten. Wenn ich nicht nach meinem Passwort gefragt würde, würde ich eher annehmen, dass es das Protokoll meiner Arbeitskopie verwendet.
Guildenstern
1
Dies ist noch verwirrender, da "git log" die Commits Ihrer lokalen Arbeitskopie anzeigt.
Konrad Höffner
18

Wenn Sie das vollständige Protokoll ohne Aktualisierung anzeigen möchten (wie ich es manchmal bei der Arbeit an einer alten Revision tue), können Sie Folgendes ausführen:

svn log -r HEAD:0

Oder zur einfacheren Anzeige:

svn log -r HEAD:0 | less
gregpaton08
quelle
2

Ich bin heute auf dasselbe Problem gestoßen und war entsetzt, als ich dachte, ich hätte meine Änderungen verloren.

Es passiert nur wegen der Verrücktheit der Subversion. Es gibt ein Konzept der Arbeitskopie, das auf die ursprünglich ausgecheckte Revision eingestellt ist. Die Überarbeitung der Arbeitskopie wird durch neue Commits nicht geändert. svn updateist erforderlich, um die Revision der Arbeitskopie mit dem Repository zu aktualisieren / zu synchronisieren. Ich bin mir nicht sicher, ob ich das in jedem Szenario tun möchte.

PS: gitist so viel besser.

Mohammad Azim
quelle
1

Sie können svn log auch explizit anweisen, zum Server zu wechseln, indem Sie die URL des Repositorys angeben.

z.B

svn log svn://your-server/trunk

Oder allgemeiner und prägnanter:

svn log ^/
Greg Bell
quelle