0

当我创建一个分支时,我想要一个挂钩脚本来更改文本文件的第一行,以记录修订号。我想这样做的原因是因为这个文本文件与其他脚本接口,然后从存储库中提取其他文件的正确修订版。

我觉得一定有一种方法可以编写一个预提交钩子脚本,如果你正在提交某个路径,它会更改一行文本,预提交。

Set "SVNHEAD=SVN HEAD"
set REPOS=%1%
Set "SVNREV=%REVISION%" (get the revision number somehow from SVN)

gsar -s%PARTSDIR:I:\=I::\% -r%SVNHEAD% -i -f %SVNREV%

可执行 gsar 替换 ascii 文件中的文本行,如果有一种简单的方法可以做到这一点 .bat 文件,但我会很感激听到它。有谁知道这是否可能/如何做?

非常感谢克里斯

4

1 回答 1

1
  • 无法在挂钩中获得未来的修订号,因为它还不存在。您无法预测修订号,因为它可以是“HEAD”+N(其中 N -任何正数):不要忘记同时并行提交性质
  • 修改 hook 中的 transaction-content 被认为是非常糟糕的做法,每个人都必须避免
  • 如果你想在文件中有修订号,你可以(有?)使用 SVN 关键字。

$Revision$ 关键字将被转换为字符串,其中包含(以及其他数据)此文件最后提交的修订,即在您的情况下 - 创建分支的修订并将包含此数据,除非您在分支内修改文件

  • 如果您无法使用 $Revision$ 技巧,您可以依赖其他数据
    • svn log -q BRANCH-URL在创建分支的最后一个数据字符串版本中返回
    • 通过分支后的额外提交,您可以svn propset somepropertry somevalue BRANCH-URL稍后使用 propget|proplist 阅读它(somevalue=revision of branching,因为它已经存在)

在您的情况下,我更喜欢使用特殊(未用于其他任务)文件,该文件必须在分支之前立即创建,并且仅在分支修订中提交一次(不优雅,但最简单的方式)

于 2012-11-06T17:48:22.550 回答