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