Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
如何在UNIX上获得正确的svn版本号?_Svn_Unix_Version - Fatal编程技术网

如何在UNIX上获得正确的svn版本号?

如何在UNIX上获得正确的svn版本号?,svn,unix,version,Svn,Unix,Version,我已经尝试了各种各样的东西,只有一个工具可以做到这一点:来自OrtoiseSVN的SubWCRev.exe svn info,svreversion都是笑话,不能提供好的结果(因此,请不要发布涉及这些内容的回复,除非您确信他们可以做到这一点) 我在一个巨大的项目上工作,我为我们的项目维护buildserver。buildserver执行稀疏签出(例如,仅签出项目实际使用的部分文件夹)。我的目标很简单:如果有人修改其他分支或文件夹中不属于我的稀疏签出的文件,我不希望我的版本号增加。基本上,我的目标

我已经尝试了各种各样的东西,只有一个工具可以做到这一点:来自OrtoiseSVN的SubWCRev.exe

svn info
svreversion
都是笑话,不能提供好的结果(因此,请不要发布涉及这些内容的回复,除非您确信他们可以做到这一点)

我在一个巨大的项目上工作,我为我们的项目维护buildserver。buildserver执行稀疏签出(例如,仅签出项目实际使用的部分文件夹)。我的目标很简单:如果有人修改其他分支或文件夹中不属于我的稀疏签出的文件,我不希望我的版本号增加。基本上,我的目标是确保相同的输入文件将生成相同的构建结果(例如,嵌入式svn编号应相同)。 来自tortoise的SubWCRev正是执行此任务,并报告所有签出文件的最后提交版本。 例如,
svinversion-cn
就是一个很好的尝试,但它不能正常工作

假设我有这样的结构:

trunk
  |
  +-src
  +-include
  +-lib
    |
    +-Win32
    +-Linux
    +-WinRT

lib文件夹包含用于不同操作系统和平台的库。例如,Win32的大小超过了gig,在linux机器上我们进行稀疏签出,例如,
svn update--set depth=exclude trunk/lib/Win32
,这样在我的linux buildserver上我甚至看不到trunk/lib/Win32。svnversion-c的问题是,即使在被排除的子文件夹中,它也会报告上次提交的版本。那么,是否有一个工具的行为类似于Turtoise svn中的
SubWCRev
(我不关心它在文件中替换标记的能力,我只需要它正确提取的最后提交的版本号).

我不会说
svn info
svversion
是笑话,它们只是包含了目录的版本。包含目录的版本会产生问题的原因是由于Subversion的方式<如果将
-f
选项传递给SubWCRev,则code>SubWCRev的行为方式与此相同

恰巧调用了一个*nix版本的
SubWCRev
。由于我是在OSX上构建的,所以需要对Makefile进行一些修改才能为我构建它。我必须在
config.mk
文件的
行上提供它
-lapr-1-lsvn_subr-1-lsvn_wc-1
。但它确实起到了宣传的作用。虽然Subversion API的版本控制规则非常陈旧,但这意味着它甚至可以针对最新的库(我碰巧是针对1.7构建的)。如果你走这条路,遇到了构建问题,请在这里发表评论,我会尽力帮助你构建它

碰巧还有一个名为的Java工具,它类似于
SubWCRev
(我还没有尝试过,但我认为它实现了它所承诺的功能)。我对这个建议唯一关心的是,它似乎直接读取工作副本数据库,这意味着它可能在将来随着我们更改数据库格式而停止工作

另一种选择是通过执行
svn info--xml-R$WC
,忽略带有
kind=“dir”
的所有节点,并计算提交实体中的最大修订版,从而从本质上实现您自己的功能。如果我没有发现上面提到的内容,我可能会这样做,但是编写XPath代码是一件痛苦的事情,我认为max函数在
xsltproc
中是不可用的(这使得编写变得更加烦人)

如果您希望看到它集成到
svversion
中,那么我建议您请求一个选项,使其忽略users@subversion.apache.org邮件列表。考虑到有几个实用程序可以做到这一点,而且它们似乎是在相当旧的一方,而且维护得不太好,我认为将这样一个选项添加到svnversion中不会有太多的反对意见