如何在不使用任何SVN工具的情況下查看.svn
中的文件來找到工作副本版本(SVN 1.7與1.8)?找出SVN工作副本版本(1.7或1.8)
回答
我很想知道這一段時間,並且無法在任何地方找到答案,甚至無法通過查看SQLite數據庫。所以我最終看到了Subversion的源代碼,我發現版本確實存儲在數據庫中,我只是沒有在正確的位置尋找。下面是從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));
(...)
}
我根本不知道該PRAGMA
語句,該語句,根據SQLite documentation是...
...特有的SQLite的SQL擴展並用於修改SQLite庫的操作或查詢SQLite庫以查找內部(非表)數據。
因此,假設在PATH
合理了最新版本的SQLite,你可以做...
sqlite3 .svn/wc.db "PRAGMA user_version"
...在你的工作拷貝的根,然後將產例如Subversion 1.8.0的Subversion 1.7.13和31
的29
。不幸的是,似乎沒有與Subversion版本user_version
相關的列表,但如果您對格式更改的實際內容感興趣,可以在格式20之後的subversion/libsvn_wc/wc-metadata.sql
的源文件中找到它們。
更新1:解決如何檢索user_version
值沒有SQLite的可執行文件的問題:你需要閱讀DWORD
在數據庫文件偏移60
,如SQLite file format specification規定(見「1.2數據庫頭「)。
更新2:爲了進一步闡明如何在一個文本/二進制文件查看器來查看它:由於目前的版本號仍然在一個單字節相當低,並配合(即他們比255
小)和DWORD
的長度爲4個字節,此時查看最低有效字節即爲字節號64
就足夠了。下面是它在Subversion 1.8.0工作副本的SQLite數據庫文件中的樣子的屏幕截圖,其中包含31
的user_version
- 如上所述。
更新3:我一直在尋找一種方式做這樣的「二元查詢」使用命令行工具,以避免在這個問題拋出Perl或此類。 Turns out there's a *nix utility for that called od
(我甚至在我的win32端口收集中,耶!)。od
可以得到user_version
最低顯著字節是這樣的:
od -An -j63 -N1 -t dC .svn/wc.db
這將再次輸出31
Subversion版本1.8.0等。
到目前爲止找不到相關文檔,但簡短的答案是 - 您可以。查看\.svn\format
文件。例如,12
表示工作副本是SVN 1.8格式。我假設如果它是SVN 1.7,那麼你會在那裏看到11
。
-1不是那樣 - 只是用Subversion 1.7.13和1.8.0試過了,它們都在格式文件中輸出了12。 – zb226
這可能是因爲這些版本實際上共享相同的回購格式... – prodigitalson
好的,但這仍然無法區分1.7和1.8 WC - 這是問題所在。在1.8和1.8之間,你不能使用1.7 WC。 – zb226
如果的.svn /格式存在,那麼閱讀它的數量:
Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5
如果的.svn /格式不存在,則版本號是在的.svn /條目的第一行:
Version 10 is SVN 1.6
Version 12 is SVN 1.7
- 1. 如何使用svn版本降級svn工作副本?
- 2. svn:'。'不是工作副本
- 3. Unbork svn工作副本
- 4. 'Un-SVN'工作副本
- 5. SVN不是工作副本
- 6. SVN升級工作副本
- 7. SVN - 簽出的副本不能提交:'不是工作副本'
- 8. SVN 1.7,單個工作副本和多個客戶端
- 9. 如何在SVN 1.7中合併工作副本?
- 10. Svn-log'。' Svn不是工作副本
- 11. git-svn:如何知道git-svn工作副本的當前SVN修訂版本?
- 12. 工作副本Unversion文件夾 - TortoiseSVN 1.7
- 13. SVN合併以前的版本到工作副本
- 14. svn中不能修復的混合版本工作副本?
- 15. SVN找出合併版本?
- 16. 如何找出SVN版本的作者?
- 17. 如何找到工作副本和任意版本之間的svn差異?
- 18. 如何欺騙用於簽出工作副本的SVN客戶端版本
- 19. Powershell腳本查找所有svn工作副本
- 20. 尋找Java類來檢索SVN中的SVN版本信息1.7
- 21. SVN:阻止較新的客戶端升級工作副本的SVN版本?
- 22. 版本。 「不是工作副本」
- 23. Jenkins:SVN工作副本的無效版本
- 24. Svn 1.7 - 如何在工作副本不存在修訂版本時將工作副本切換到重定位的回購
- 25. dojo的event.preventDefault()不工作dojo 1.8版本
- 26. SVN升級工作副本 - TortoiseSVN
- 27. SVN-ANT錯誤 - 「不是工作副本」
- 28. svn:工作副本'。'鎖定 - DHxlsReaderIOS
- 29. creatin與svn和ftp的工作副本
- 30. 升級後SVN工作副本太舊
可能重複[如何確定SVN工作副本佈局版本?](http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-version ) –
此問題的更一般的答案已經存在:http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-v ersion –
可能重複的* [如何確定SVN工作副本佈局版本?](http://stackoverflow.com/questions/1364618)*。 –