Jak mogę znaleźć wersję roboczą kopii (SVN 1.7 vs. 1.8), przeglądając pliki wewnątrz .svn
bez użycia jakiegokolwiek narzędzia SVN?Znajdź wersję roboczą kopii roboczej SVN (1.7 lub 1.8)
Odpowiedz
Przez pewien czas zastanawiałem się nad tym i nie mogłem znaleźć nigdzie odpowiedzi, nawet patrząc na bazę danych SQLite. Więc skończyło się na zaglądaniu do kodu źródłowego Subversion, gdzie znalazłem, że wersja jest rzeczywiście przechowywana w bazie danych, po prostu nie szukałem we właściwym miejscu. Oto odnośny fragment z subversion/libsvn_subr/sqlite.c
:
svn_error_t *
svn_sqlite__read_schema_version(int *version,
svn_sqlite__db_t *db,
apr_pool_t *scratch_pool)
{
(...)
SVN_ERR(prepare_statement(&stmt, db, "PRAGMA user_version;", scratch_pool));
(...)
}
nie byłem nawet świadomy rachunku PRAGMA
, która, zgodnie z SQLite documentation jest ...
... rozszerzeniem SQL specyficzne dla SQLite i używane do modyfikowania działania biblioteki SQLite lub do przeszukiwania biblioteki SQLite dla wewnętrznych (nie-tabelowych) danych.
Zatem przyjmując wersję przystępnej up-to-date z SQLite na PATH
można zrobić ...
sqlite3 .svn/wc.db "PRAGMA user_version"
... w korzeniu kopii roboczej, która następnie wydajność na przykład 29
dla Subversion 1.7.13 i 31
dla Subversion 1.8.0. Niestety, wydaje się, że nie ma żadnej listy korelującej z user_version
z wersją Subversion, ale jeśli interesuje Cię to, z czego faktycznie składają się zmiany formatu, możesz je znaleźć w źródłach w subversion/libsvn_wc/wc-metadata.sql
dla formatu 20 i późniejszych.
Aktualizacja 1: Zwracając się pytanie, jak pobrać wartość user_version
bez SQLite wykonywalnego: Trzeba czytać DWORD
na przesunięcie 60
w pliku bazy danych, jak określono w SQLite file format specification (patrz „1.2 Database Nagłówek").
Aktualizacja 2: Aby wyjaśnić dalej, jak by go zobaczyć w text/widza binarnego pliku: Ponieważ aktualne numery wersji są wciąż dość niskie i zmieścić się w jednym bajcie (czyli są one mniejsze niż 255
) oraz DWORD
ma długość czterech bajtów, wystarcza w tej chwili sprawdzić najmniej znaczący bajt - który jest bajtem o numerze 64
. Poniżej znajduje się zrzut ekranu pokazujący, jak to wygląda w pliku bazy danych SQLite kopii roboczej Subversion 1.8.0, który przenosi 31
dla user_version
- jak już wspomniano powyżej.
Update 3: Ja zawsze szuka sposobu, aby zrobić takie „kwerend binarne” z narzędzia wiersza polecenia, aby uniknąć rzucania Perl lub takich na problem. Turns out there's a *nix utility for that called od
(a nawet dostałem go w mojej kolekcji portów win32, yay!).od
można dostać najmniej znaczący bajt user_version
tak:
od -An -j63 -N1 -t dC .svn/wc.db
To znowu wyjście 31
dla Subversion 1.8.0 i tak dalej.
Nie można znaleźć dokumentacji na ten temat, jednak krótka odpowiedź brzmi - możesz. Zajrzyj do pliku \.svn\format
. Na przykład numer 12
oznacza, że kopia robocza ma format SVN 1.8. Zakładam, że jeśli jest to SVN 1.7, to zobaczysz tam 11
.
-1 Nie, to nie to - po prostu wypróbowałem go z Subversion 1.7.13 vs 1.8.0 i oba wyprowadzają '12' w pliku' format'. – zb226
Może to wynikać z tego, że te wersje mają ten sam format repo ... – prodigitalson
OK, ale to nadal nie pomaga odróżnić 1,7 od 1,8 WC - o to właśnie chodziło pytanie. Nie można operować na 1.7 WC z 1.8 i na odwrót. – zb226
Jeśli .svn/format istnieje, a następnie odczytać numer w nim:
Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5
Jeśli .svn/format nie istnieje następnie numer wersji jest na pierwszej linii w .svn/wpisów:
Version 10 is SVN 1.6
Version 12 is SVN 1.7
- 1. Zaktualizuj serwer Subversion od 1.7 do 1.8
- 2. Jenkins: nieważna wersja kopii roboczej SVN
- 3. svn: usuwanie zewnętrznych w kopii roboczej?
- 4. Przenoszenie kopii roboczej SVN po zmianie nazwy gałęzi
- 5. SVN E155016 Baza danych kopii roboczej w ... jest uszkodzona
- 6. svnkit: jak uzyskać numer wersji roboczej kopii?
- 7. Sprytny sposób na zmianę nazwy katalogu w kopii roboczej subversion
- 8. JGit wykryje zmianę nazwy kopii roboczej
- 9. Jak określić wersję arkusza roboczego wersji SVN?
- 10. SVN: zmiana nazwy w przeglądarce Repo z zachowaniem kopii roboczej zsynchronizowanej
- 11. VisualSVN i biblioteki klas nie w kopii roboczej root
- 12. Odwróć Zastosuj zatwierdzenie do kopii roboczej
- 13. git svn braku migracji z svn 1.8
- 14. Czy TortoiseSVN 1.7 będzie działał poprawnie w repozytorium SVN 1.6?
- 15. Subwersja: Różnica między głębokością "kopii roboczej" i "rekursywną" podczas łączenia?
- 16. Zmiana nazwy użytkownika w SVN + SSH URI w locie w kopii roboczej
- 17. androidstudio zestaw wersję Java 1.7
- 18. Workspace brakujące połączone pliki z kopii roboczej
- 19. Jak przenieść wersję roboczą do Gerrit?
- 20. Łączenie różnic między dwoma gałęziami git i zastosowanie go do kopii roboczej
- 21. tworzenie niezależnej kopii repozytorium svn
- 22. Xcode: Błąd -> Kompilacja nie powiodła się -> Uaktualnij klienta Subversion, aby użyć tej kopii roboczej.
- 23. Awesomium 1.7. Jak zmienić wersję przeglądarki awesomium?
- 24. Jak uzyskać wersję roboczą SMS-a w Androidzie 6 Marshmallow
- 25. SVN znaleźć wersję tagu
- 26. Znajdź najnowszą zaaprobowaną wersję składnika SPListItem
- 27. Integracja SVN Delphi, która działa z SVN 1.7?
- 28. Jak ponownie znaleźć kopię roboczą w SourceTree
- 29. SVN - Przywróć repozytorium z kopii zapasowej
- 30. SVN 1.7.1 Issue
możliwy duplikat [Jak określić wersję roboczą kopii roboczej SVN?] (Http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-version) –
Istnieje ogólniejsza odpowiedź na to pytanie: http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-v ersion –
Możliwy duplikat * [Jak określić wersję layoutu kopii roboczej SVN?] (http://stackoverflow.com/questions/1364618) *. –