我怎样才能有一个后提交的钩子只有提交TRUNK提交时才被调用?

我有一个存储库,有以下目录:

  • 分支机构
  • 标签
  • 树干

主干目录包含开发的主线。 我为存储库创build了一个post-commit钩子脚本,当用户提交回存储库时,它会更新(trunk)的工作副本。

它看起来像这样:

/usr/bin/svn update /path/to/a/working/copy 

我刚刚创build了一个代码分支,因为我即将开始一些重大更改,但注意到当我将更改提交给分支时,它会调用post-commit挂钩并更新工作副本(trunk的副本)。

有没有一种方法可以修改我的提交后脚本或设置,我可以做只会更新工作副本如果提交到中继目录,而不是任何其他目录?

正如您在本文档中所看到的那样,参数被传递给提交后的脚本。

存储库将两个参数传递给此程序:存储库的路径以及创建的新修订版本号。

后提交的钩子可以是任何类型的任何程序:一个bash脚本,一个C程序,一个python脚本……发生什么事情是,壳启动这个程序,两个参数。

你可以在这里找到有趣的脚本列表。 一个好的开始将是这个python脚本 ,它使用python svn库。

请注意,提供的路径与您正在签入的文件的路径不同(请参阅Paul的答案 )。 但是,将这些信息与revnum一起使用可以帮助您获取更改列表,从中可以确定操作是否在主干上完成。

除了Bishiboosh的回答外 ,值得注意的是钩子可以是任何程序。 也就是说,如果你想,你可以用C编写程序。 文档中介绍了传递的参数。

为了获得灵感的一个很好的脚本库,看看颠覆工具页面 。 一般来说,如果你想根据事务的内容做一些条件处理,而且你这样做,因为你只想处理文件是否在trunk中,那么使用Python将是最简单的,因为它带有一个一堆工具来检查交易。 这个脚本是一个开始寻找灵感的好地方。

请注意,参数的路径与您正在检入的文件的路径不同。您可能在签入后有多个文件…您传递的是存储库的位置,而修订版的变化。 使用这两条信息,您可以从存储库中获取有关更改的信息,并使用该信息来决定是否在提交后挂钩中执行操作。

这里是另一个例子 (在Perl中)明确检查签入文件的路径。 这是一个更复杂的脚本,但很可能突出的部分可以被删除和重新使用。