2011-01-01 16 views
7

Ich arbeite an einem Projekt, das das Extrahieren von Details von einem SVN-Server mithilfe von SVNKit umfasst. Mein Projekt ist bereits abgeschlossen und wir arbeiten seit einiger Zeit daran. Bei den Tests fiel mir etwas sehr merkwürdig auf. Die Commit Times Meine Extraktdaten scheinen sich immer von denen in SVN Logs zu unterscheiden.Wie speichert SVN Commit-Zeit?

Ich konnte keinen Code in meinem Projekt finden, der diesen Unterschied verursachen könnte, aber jetzt schaue ich, wie SVN-Server die Commit-Zeit in sich speichert. Da wir Entwickler aus verschiedenen Teilen der Welt arbeiten, was zu unterschiedlichen Zeitzonen führt, dachte ich, dass SVN möglicherweise Zeit speichert, nachdem sie in GMT oder Zeitzone des Systems konvertiert wurden, auf dem der SVN-Server läuft. Aber das scheint nicht zu passieren. Stattdessen werden die Zeiten wie zu dem Zeitpunkt, zu dem das Commit durchgeführt wurde, und in der lokalen Zeitzone selbst gespeichert.

Ich konnte bisher kein substanzielles Dokument im Internet finden, um meine Theorie zu unterstützen.

Kann jemand in Kürze erklären, wie SVN die Commit-Zeit für jede Änderung speichern? Dokumentationslinks, die darauf verweisen, werden eine große Hilfe sein.

Antwort

6

Sieht aus wie Subversion setzt Zeit basierend auf server Zeit mit UTC Zeitzone, this E-Mail von Subversion Entwickler Ben Collins-Sussman bestätigt sie begehen. Auch git-svn Manpage und Perl SVN::Web Modul Dokumentation stimmt damit überein.

2

Vom section of the SVN book documenting the unversioned properties:

svn:date

Enthält die UTC-Zeit der Revision erstellt wurde, im ISO 8601-Format. Der Wert kommt von der Uhr des Servers, nicht vom Client.

ISO 8601 ermöglicht immer noch eine große Anzahl verschiedener Formate, und Zeitzonenindikatoren sind nicht obligatorisch. wenn Sie einen Blick auf den Wert von svn:date wie dies jedoch nehmen:

svn propget --revprop -r HEAD http://example.com/svn 

Dann wird das Ergebnis so etwas wie dieses:

2010-12-23T00:45:41.552600Z 

Das Z am Ende ist der Indikator für die UTC Zeitzone, und Subversion verwendet immer diese Zeitzone, um die Commit-Datetime aufzuzeichnen.

2

Ihr Aufruf des Unterbefehls propget scheint das Argument svn: date wegzulassen. Ich musste den Befehl auf diese Weise eingeben, um das gewünschte Ergebnis zu erreichen:

svn propget --revprop -r HEAD svn: datum