Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找SVN工作副本版本(1.7或1.8)_Svn - Fatal编程技术网

查找SVN工作副本版本(1.7或1.8)

查找SVN工作副本版本(1.7或1.8),svn,Svn,如何在不使用任何SVN工具的情况下通过查看.SVN中的文件来找到工作副本版本(SVN 1.7 vs.1.8)?目前为止找不到关于此的文档,但简短的回答是--您可以。查看\.svn\format文件。例如,number12表示工作副本为SVN 1.8格式。我假设如果它是SVN1.7版本的,那么您将在那里看到11。我自己也对这个问题感到疑惑,但在任何地方都找不到答案,即使是通过查看SQLite数据库也找不到答案。所以我最后查看了Subversion的源代码,在那里我发现版本确实存储在数据库中,我只是

如何在不使用任何SVN工具的情况下通过查看
.SVN
中的文件来找到工作副本版本(SVN 1.7 vs.1.8)?

目前为止找不到关于此的文档,但简短的回答是--您可以。查看
\.svn\format
文件。例如,number
12
表示工作副本为SVN 1.8格式。我假设如果它是SVN1.7版本的,那么您将在那里看到
11

我自己也对这个问题感到疑惑,但在任何地方都找不到答案,即使是通过查看SQLite数据库也找不到答案。所以我最后查看了Subversion的源代码,在那里我发现版本确实存储在数据库中,我只是没有找到正确的位置。以下是以下内容的相关片段:

我甚至不知道
PRAGMA
语句,根据is

…特定于SQLite的SQL扩展,用于修改SQLite库的操作或查询SQLite库中的内部(非表)数据

因此,假设在
路径上有一个合理的最新版本的SQLite,您就可以

sqlite3 .svn/wc.db "PRAGMA user_version"
…在工作副本的根目录中,然后将生成Subversion 1.7.13的
29
和Subversion 1.8.0的
31
。不幸的是,似乎没有将
user\u version
与Subversion版本关联的列表,但是如果您对格式更改的实际内容感兴趣,可以在for格式20以后的源代码中找到它们

更新1:解决了如何在没有SQLite可执行文件的情况下检索
user\u version
的值的问题:您需要读取数据库文件中偏移量
60
处的
DWORD
,如中所述(请参阅“1.2数据库头”)

更新2:进一步澄清如何在文本/二进制文件查看器中查看:由于当前版本号仍然很低,只能容纳一个字节(即小于
255
),且
DWORD
长度为四个字节,目前来看最低有效字节就足够了,即字节数
64
。下面是Subversion 1.8.0工作副本的SQLite数据库文件的屏幕截图,该文件包含用户版本的
31
,如上所述

更新3:我一直在寻找一种使用命令行工具进行这种“二进制查询”的方法,以避免在这个问题上抛出perl之类的东西。(我甚至在我收集的win32端口中找到了它,耶!)
od
可以获得
user\u version
的最低有效字节,如下所示:

od -An -j63 -N1 -t dC .svn/wc.db

这将再次为Subversion 1.8.0等输出
31

如果存在.svn/format,则读取其中的数字:

Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5
如果.svn/format不存在,则版本号位于.svn/entries的第一行:

Version 10 is SVN 1.6
Version 12 is SVN 1.7

-1不,不是这样-只是用Subversion 1.7.13和1.8.0进行了尝试,它们都以
格式输出
12
。好的,但这仍然无助于区分1.7和1.8 WC-这就是问题所在。您不能在1.7 WC和1.8上操作,反之亦然。这是我尝试过的,但我的SVN 1.7和SVN 1.8工作副本似乎都显示了版本12。@ThomasS。您确定这两个工作副本是不同的SVN吗?它们是不同的,格式已从1.7更改为1.8,并且彼此不兼容。此问题的更一般答案可能存在重复:可能存在重复。这不是重复,如上面链接的问题(三次)不包括1.7和1.8-除了与此问题反向链接的答案。
Version 10 is SVN 1.6
Version 12 is SVN 1.7