我已经创建了一个名为version.ini的文件,该文件受版本控制(/trunk/version.ini)我现在想要使用最新版本更新该文件的post post钩子.但我不知道什么命令可以做到这一点.我知道我有这个参数:
#!/bin/sh REPOS = "$1" REV = "$2"
但是,如何在不进行新修订的情况下替换该文件的内容?我的回购中还有这些变化吗?
更新:因为我可能还没清楚,我将尝试更详细的探索:让我说我有这个回购:/ svn/repos/project/trunk /并且在其中我有一个名为version.ini的文件,它受版本控制.我想要做的是每次提交更新该文件到新版本.让我们说当前的版本是263我希望该文件中有263个写入.并回答一个答案,你不能使用关键字,因为他们只有工作,如果我更新该文件,我不想这样做.
希望我有道理,感谢你给予的任何帮助.干杯
你真正想要的不是修改你的提交的方法,而是像svn:keywords这样的东西.不幸的是,正如你可以在"$ Global $ Rev $?"框中读到的那样.这并没有真正做你想要的.相反,您必须编写一个脚本来调用和解析svnversion的输出,并以某种方式将结果作为构建的一部分放入您的文件中.
现在,为了回答你的文字问题,思考你在svn钩子脚本中能做什么和不能做什么仍然很有趣:
您无法从提交后挂钩更改提交
在提交后挂钩运行时,提交已经完成(顾名思义),因此更改文件是不可能的.此时您只能检查更改.
您也无法修改预提交挂钩中的挂起提交
您可以使用带有--transaction开关的svnlook工具从预提交挂钩检查挂起事务的内容,但不能更改它.
如果可以在预提交挂钩中进行任意更改,那么服务器显然需要将这些更改报告给svn客户端.否则,客户端会认为他的文件处于提交的修订版本,而实际上它们实际上是不同的.如果svn客户端接受此类报告的更改,则可能会导致您的工作被提交消除.对于版本控制系统而言,这将是一个令人惊讶的特征,温和地说.不用说颠覆不允许这样.
如果不修改版本号,就无法更改仓库中的任何内容.
解决方案是将特殊关键字(搜索svn:keywords
)放入文件中,并在结账时让SVN替换它们.看起来这些值来自存储库,但存储库中文件的表示不会改变.
您可能正在寻找$ LastChangedRevision $(或简称$ Rev $).
另一种解决方案是在构建工具/ Makefile/svn info
项目根目录中使用的任何内容中添加规则,以确定当前版本并将其放入临时文件(未添加到您的仓库中).