【问题标题】:Per-branch, per-repo commit hook in gitolitegitolite 中的每个分支,每个 repo 提交钩子
【发布时间】:2012-06-15 15:53:54
【问题描述】:

我想添加一个提交钩子,当在 gitolite/git 服务器上收到推送时,只针对给定分支和 repo 组合(repo 'dog' 上的分支'cat')。

我的环境: git 版本 1.7.4.1,

到目前为止我做了什么:

  1. 触摸了 git/gitolite 服务器上/home/git/repositories/dog.git/hooks/post-receive.secondary 的文件。

  2. 用内容编辑文件:

    #!/bin/sh
    #
    refname="$1"
    oldrev="$2"
    newrev="$3"
    if [ "$refname" == "refs/heads/cat" ]
    then
       touch /tmp/test
    fi
    
  3. 将文件的所有者设置为“git”用户

  4. 设置文件权限为700

  5. 提交到“dog”回购的“cat”分支

结果: 未创建测试文件

【问题讨论】:

  • 如果在脚本中添加回显,它会显示吗?你有 gitolite v2 还是 v3?
  • @VonC - 来自 src/CHANGELOG 我相信我正在运行 v2.0,但我找不到要执行的二进制文件来验证这一点。我会检查脚本中的 echo 命令并尽快回复
  • 简单:如果你的 gitolite 中有 'gl-xxx' 命令,这是 V2。
  • @VonC - 它们不在我的 PATH 中,但 /home/git/.gitolite/src 中有 gl-xxx 命令,是的
  • 如果我手动运行脚本,传入 refname 然后是的,它执行得很好,它根本没有被执行,或者当我将代码提交到那个 repo 上的那个分支时以某种方式失败

标签: git gitolite githooks git-post-receive


【解决方案1】:

如果我查看Gitolite v2 (g2) hook chaining section,只有两个钩子与“.secondary”扩展名有关:

  • 更新挂钩,因为它在所有存储库中都使用,并且对 gitolite 的访问控制至关重要
  • 更新后挂钩,因为它仅在gitolite-admin repo 中使用,用于“编译”配置等。

  • post-receive 仅在激活镜像时才涉及,在您的 gitolite 安装中不应该是这种情况)

因此,您不需要声明post-receive.secondary,只需在</path/to/gitolite>/hooks/common/ 中声明post-receive 挂钩,如“How to install hooks in gitolite”中所述。


OP specialsauce 在 cmets 中结束:

我需要在存储库文件夹中添加一个post-receive 挂钩(而不是第二个),我认为这是它没有执行的主要原因。

我认为最后我唯一改变的另一件事是将烫发从700(无论如何应该没问题?)设置为755
钩子现在可以可靠地执行。

我不需要运行gl-setup 脚本。此外,我从上面概述的 var 分配代码更改为 STDIN 上的“while”。

【讨论】:

  • 有一个post-receive.mirrorpush 符号链接,这就是我使用.secondary 文件名的原因。关于将钩子放在</path/to/gitolite>/hooks/common/ 中,我明确希望这个钩子只对单个存储库的提交生效,而我相信公共位置的钩子会在提交到任何存储库时触发
  • @user1459145 不,你应该使用 .secondary 因为post-receive.mirrorpush:文档很清楚:“作为post-receive.mirrorpush发货,它被重命名为'post-receive'并作为一部分安装镜像设置”:如果您没有看到“post-receive”,您可以创建自己的。
  • 感谢您的澄清。但是,我已将文件移动到 post-receive 并运行第二次提交,但仍然没有创建临时文件。
  • @user1459145 你在那个脚本中放了一个回显,只是为了看看它是否至少被调用了?您是否首先通过再次运行 gl-setup 将您的脚本符号链接到所有 repo?
  • 感谢您的坚持。回声在那个脚本中,是的。所以脚本的正确主页是</path/to/gitolite>/hooks/common/post-receive,并且它只会在给定存储库具有从</path/to/repository>/hooks/post-receive</path/to/gitolite>/hooks/common/post-receive 的符号链接时才实际执行?
猜你喜欢
  • 2011-09-16
  • 2017-08-24
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
相关资源
最近更新 更多