gpt4 book ai didi

svn - 找出SVN工作副本版本(1.7或1.8)

转载 作者:行者123 更新时间:2023-12-03 08:54:15 24 4
gpt4 key购买 nike

如何通过查看.svn中的文件而不使用任何SVN工具来找出工作副本版本(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所说,它是...

...an SQL extension specific to SQLite and used to modify the operation of the SQLite library or to query the SQLite library for internal (non-table) data.



因此,假设在 PATH上使用了合理的SQLite最新版本,您可以...
sqlite3 .svn/wc.db "PRAGMA user_version"

...在您的工作副本的根目录中,例如Subversion 1.7.13的 29和Subversion 1.8.0的 31。不幸的是,似乎没有将 user_version与Subversion版本相关联的列表,但是如果您对格式更改的实际含义感兴趣,可以在 subversion/libsvn_wc/wc-metadata.sql 的源代码中找到格式20以后的版本。

更新1:解决了在没有SQLite可执行文件的情况下如何检索 user_version值的问题:您需要按照 SQLite file format specification中的指定,读取数据库文件中 DWORD偏移量处的 60(请参阅“1.2数据库头”)。

更新2:要进一步阐明如何在文本/二进制文件查看器中查看它:由于当前版本号仍然很低并且适合单个字节(即,它们小于 255),而 DWORD是四个字节长,目前足以查看最低有效字节-字节数 64。下面是屏幕快照,显示了Subversion 1.8.0工作副本的SQLite数据库文件的外观,该文件包含 31user_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

这将再次为Subversion 1.8.0输出 31,依此类推。

关于svn - 找出SVN工作副本版本(1.7或1.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com