Làm cách nào để tìm phiên bản sao chép làm việc (SVN 1.7 so với 1.8) bằng cách xem các tập tin bên trong .svn
mà không sử dụng bất kỳ công cụ SVN nào?Tìm phiên bản sao chép SVN (1.7 hoặc 1.8)
Trả lời
Tôi đã tự hỏi về điều này bản thân mình trong một thời gian và không thể tìm thấy câu trả lời ở bất cứ đâu, thậm chí không bằng cách xem cơ sở dữ liệu SQLite. Vì vậy, tôi đã kết thúc nhìn vào mã nguồn Subversion, nơi tôi thấy rằng phiên bản thực sự được lưu trữ trong cơ sở dữ liệu, tôi chỉ không nhìn vào đúng nơi. Dưới đây là đoạn mã có liên quan từ 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));
(...)
}
Tôi thậm chí còn không nhận thức được tuyên bố PRAGMA
, trong đó, theo SQLite documentation là ...
... một phần mở rộng SQL cụ thể để SQLite và được sử dụng để sửa đổi hoạt động của thư viện SQLite hoặc truy vấn thư viện SQLite cho dữ liệu bên trong (không phải bảng).
Như vậy, giả sử một phiên bản cập nhật lên một cách hợp lý của SQLite trên PATH
bạn có thể làm ...
sqlite3 .svn/wc.db "PRAGMA user_version"
... trong thư mục gốc của bản sao làm việc của bạn, mà sau đó sẽ sản lượng ví dụ 29
cho Subversion 1.7.13 và 31
cho Subversion 1.8.0. Rất tiếc, không có danh sách nào tương ứng với user_version
với phiên bản Subversion, nhưng nếu bạn quan tâm đến những thay đổi định dạng thực sự bao gồm, bạn có thể tìm thấy chúng được mô tả trong các nguồn ở subversion/libsvn_wc/wc-metadata.sql
cho định dạng 20 trở đi.
Cập nhật 1: Phát biểu tại câu hỏi làm thế nào để lấy giá trị của user_version
mà không có một thực thi SQLite: Bạn cần phải đọc một DWORD
tại offset 60
trong file cơ sở dữ liệu, theo quy định tại các SQLite file format specification (xem "1.2 Cơ sở dữ liệu Tiêu đề ").
Cập nhật 2: Để làm rõ hơn cách xem trong trình xem tệp văn bản/nhị phân: Vì số phiên bản hiện tại vẫn còn khá thấp và vừa với một byte (nghĩa là chúng nhỏ hơn 255
) và DWORD
dài bốn byte, hiện tại đủ để xem byte ít quan trọng nhất - đó là số byte 64
. Dưới đây là một ảnh chụp màn hình về cách nó trông giống như trong tệp cơ sở dữ liệu SQLite của bản sao làm việc của Subversion 1.8.0, có chứa 31
cho user_version
- như đã đề cập ở trên.
Cập nhật 3: Tôi đã luôn luôn tìm kiếm một cách để làm "truy vấn nhị phân" như vậy với một công cụ dòng lệnh, để tránh ném perl hay như vậy ở vấn đề. Turns out there's a *nix utility for that called od
(và tôi thậm chí đã có nó trong bộ sưu tập của tôi về các cổng win32, yay!).od
có thể nhận được các byte trọng số thấp nhất của user_version
như thế này:
od -An -j63 -N1 -t dC .svn/wc.db
này sẽ một lần nữa sản lượng 31
cho Subversion 1.8.0 và vân vân.
Không thể tìm thấy tài liệu về điều này cho đến nay, tuy nhiên câu trả lời ngắn gọn là - bạn có thể. Peek vào \.svn\format
tệp. Ví dụ, số 12
có nghĩa là bản sao làm việc có định dạng SVN 1.8. Tôi cho rằng nếu nó là của SVN 1.7, thì bạn sẽ thấy 11
ở đó.
-1 Không phải là nó - chỉ cần thử nó với Subversion 1.7.13 vs 1.8.0 và cả hai đầu ra '12' trong tập tin' định dạng'. – zb226
Điều đó có thể là do các phiên bản đó thực sự có cùng định dạng repo ... – prodigitalson
OK, nhưng điều đó vẫn không giúp phân biệt 1,7 từ 1,8 WC - đó là câu hỏi. Bạn không thể hoạt động trên 1,7 WC với 1.8 và ngược lại. – zb226
Nếu .svn/định dạng tồn tại, sau đó đọc số trong đó:
Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5
Nếu .svn/định dạng không tồn tại sau đó số phiên bản là trên dòng đầu tiên trong svn/mục:
Version 10 is SVN 1.6
Version 12 is SVN 1.7
Đó là những gì tôi đã thử, nhưng có vẻ như SVN 1.7 và SVN 1.8 bản sao làm việc của cả hai đều hiển thị phiên bản 12. –
@ThomasS. bạn có chắc chắn về cả hai bản sao làm việc là SVN khác nhau? – Shafeeque
Có, định dạng đã được thay đổi từ 1,7 đến 1,8 và chúng không tương thích với nhau. – mliebelt
- 1. Nâng cấp Máy chủ Subversion từ 1.7 lên 1.8
- 2. SVN 1.7+ trong Netbeans 7.0
- 3. TortoiseSVN hạ cấp vấn đề từ 1.8 xuống 1.7
- 4. Làm cách nào để sao chép các thư mục con của bản sao làm việc trong svn 1.7 trong khi vẫn giữ siêu dữ liệu?
- 5. Tích hợp Delphi SVN hoạt động với SVN 1.7?
- 6. Sao chép nhiều dự án SVN với git-svn
- 7. Giải pháp sao chép phiên bản FOSS ASP.Net?
- 8. ArrayList bản sao nông lặp hoặc sao chép()
- 9. Yêu cầu phiên bản Gradle 1.8. Phiên bản hiện tại là 1.9-rc-3 - Android Studio
- 10. Sao chép sâu hoặc sao chép bản ghi ADODB trong VBA
- 11. Android Studio SVN 1.8 Khách hàng này quá cũ để làm việc với bản sao làm việc
- 12. SVN: Ngăn chặn một máy khách mới hơn nâng cấp phiên bản SVN của bản sao làm việc?
- 13. Cách sao chép hoặc sao chép một mảng các mảng
- 14. SVN Nâng cấp bản sao làm việc - TortoiseSVN
- 15. Sao chép hoặc sao chép bộ sưu tập trong Julia
- 16. Jenkins: phiên bản không hợp lệ của SVN bản sao làm việc
- 17. svn: quay trở lại phiên bản trước
- 18. SVN đánh dấu phiên bản chính
- 19. Mở khóa bản sao làm việc SVN với các tài nguyên không phiên bản
- 20. Dán bản sao TinyMCE từ notepad (clipboard) với javafx WebView trên java 1.8
- 21. Sao chép SVN Trunk To Branch, Sao chép thư mục Trunk quá?
- 22. bản sao git-svn | chi nhánh giả
- 23. hàm tạo hoặc sao chép hàm tạo?
- 24. IntelliJ - java: Không thể tìm thấy bản cập nhật JDK '1.8'
- 25. Cách tìm phiên bản cập nhật java?
- 26. Phiên bản JavaScript sau 1.5 - tại sao?
- 27. Bash: tìm và sao chép
- 28. TortoiseSVN 1.7 có hoạt động đúng với kho lưu trữ SVN 1.6 không?
- 29. Sao chép/Sao chép Bản đồ Javascript Biến
- 30. Subversion: Bản sao làm việc là phiên bản phát triển cũ
bản sao có thể có của [Làm cách nào để xác định Phiên bản bố cục công việc SVN?] (Http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-version) –
Câu trả lời chung chung hơn cho câu hỏi này đã tồn tại: http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-v ersion –
Bản sao có thể có của * [Làm cách nào để xác định phiên bản bố cục làm việc SVN?] (http://stackoverflow.com/questions/1364618) *. –