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