2011-01-01 9 views
7

Pracuję nad projektem, który polega na wyodrębnianiu szczegółów z serwera SVN przy użyciu SVNKit. Mój projekt jest już kompletny i działamy już od jakiegoś czasu. Podczas testów zauważyłem coś bardzo dziwnego. Commit Times wydaje się, że moje dane ekstraktu są inne niż w dziennikach SVN.W jaki sposób czas zatwierdzania sklepu SVN?

Nie mogłem znaleźć żadnego kodu w moim projekcie, który mógłby wywoływać tę różnicę, ale teraz szukam, jak serwer SVN przechowuje czas Commit sam w sobie. Ponieważ programista pracuje z różnych części świata, co daje różne strefy czasowe, myślałem, że SVN może przechowywać czas po konwersji na GMT lub strefę czasową systemu, na którym działa serwer SVN. Ale tak się nie dzieje. Zamiast tego czasy są przechowywane zgodnie z czasem, w którym zatwierdzono i w tej lokalnej strefie czasowej.

Nie udało mi się znaleźć żadnego istotnego dokumentu w Internecie, aby potwierdzić moją teorię.

Czy ktoś może w skrócie wyjaśnić, w jaki sposób SVN zapamiętuje czas zatwierdzenia dla każdej zmiany? Pomocne w tym będą linki do odnośników.

Odpowiedz

6

Wygląda na to, że Subversion ustawia czas zatwierdzenia na podstawie czasu server przy użyciu UTC timezone, this e-mail od dewelopera Subversion Ben Collins-Sussman potwierdza to. Również dokumentacja modułowa i dokumentacja Perl zgadza się z tym.

2

Z section of the SVN book documenting the unversioned properties:

svn:date

Zawiera czas UTC przegląd został utworzony w formacie ISO 8601. Wartość pochodzi z zegara komputera serwera, a nie klienta.

ISO 8601 nadal pozwala na dużą liczbę różnych formatów, a wskaźniki strefy czasowej nie są obowiązkowe. Jeśli jednak przyjrzeć się wartości svn:date jak ten:

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

Wtedy wynik będzie coś takiego:

2010-12-23T00:45:41.552600Z 

To Z na końcu jest wskaźnikiem UTC timezone, a Subversion zawsze używa tej strefy czasowej do zapisania datetime commit.

2

Twoje wywołanie podkomendy propget wydaje się pomijać argument svn: date. Musiałem wprowadzić polecenie w ten sposób, aby osiągnąć pożądany wynik:

svn propget --revprop -r GŁÓWNA svn: data