gitolite中的每个分支、每个repo提交钩子

gitolite中的每个分支、每个repo提交钩子,git,gitolite,githooks,git-post-receive,Git,Gitolite,Githooks,Git Post Receive,我想添加一个提交钩子,该钩子在gitolite/git服务器上接收到只针对给定分支和repo组合的推送时起作用(repo“dog”上的分支“cat”) 我的环境: git版本1.7.4.1 到目前为止我所做的: 在git/gitolite服务器上的/home/git/repositories/dog.git/hooks/post-receive.secondary中触摸了一个文件 编辑了包含以下内容的文件: #!/bin/sh # refname="$1" oldrev="$2" newrev=

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

我的环境: git版本1.7.4.1

到目前为止我所做的:

  • 在git/gitolite服务器上的
    /home/git/repositories/dog.git/hooks/post-receive.secondary
    中触摸了一个文件

  • 编辑了包含以下内容的文件:

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

  • 将文件权限设置为700

  • 对“狗”回购的“猫”分支作出承诺

  • 结果: 测试文件没有创建

    如果我看一下,只有两个钩子与“
    .secondary
    ”扩展名有关:

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

    • post receive
      仅在镜像被激活时才涉及,在gitolite安装中不应如此)

    因此,您不需要声明一个
    post receive.secondary
    ,只需要在
    /hooks/common/
    中声明一个
    post receive
    钩子,如“”中所述


    报告在评论中得出结论:

    我需要在存储库文件夹中设置一个
    post receive
    hook(而不是第二个),我认为这是它无法执行的主要原因

    最后我唯一改变的是将烫发设置从
    700
    (这本来应该可以吗?)更改为
    755

    钩子现在可以可靠地执行

    我不需要运行
    gl设置
    脚本。此外,我在
    STDIN
    上将上述var分配代码更改为“while”

    如果我看一下,只有两个钩子与“
    .secondary
    ”扩展有关:

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

    • post receive
      仅在镜像被激活时才涉及,在gitolite安装中不应如此)

    因此,您不需要声明一个
    post receive.secondary
    ,只需要在
    /hooks/common/
    中声明一个
    post receive
    钩子,如“”中所述


    报告在评论中得出结论:

    我需要在存储库文件夹中设置一个
    post receive
    hook(而不是第二个),我认为这是它无法执行的主要原因

    最后我唯一改变的是将烫发设置从
    700
    (这本来应该可以吗?)更改为
    755

    钩子现在可以可靠地执行

    我不需要运行
    gl设置
    脚本。此外,我在
    STDIN
    上将上述var分配代码更改为“while”



    如果在脚本中添加回音,是否显示?你有gitolite v2或v3吗?@VonC-从src/CHANGELOG我相信我正在运行v2.0,但我找不到一个二进制文件来执行以验证这一点。我将检查脚本中的echo命令并做出简短的响应示例:如果gitolite中有“
    gl xxx
    ”命令,这是V2。@VonC-它们不在我的路径中,但在/home/git/.gitolite/src中有gl xxx命令,是的,如果我手动运行脚本,传入refname,则执行良好,它只是没有被执行,或者在我将代码提交到那个repose上的那个分支时以某种方式失败。如果您在脚本中添加了一个echo,它会被显示吗?你有gitolite v2或v3吗?@VonC-从src/CHANGELOG我相信我正在运行v2.0,但我找不到一个二进制文件来执行以验证这一点。我将检查脚本中的echo命令并做出简短的响应示例:如果gitolite中有“
    gl xxx
    ”命令,这是V2。@VonC-它们不在我的路径中,但在/home/git/.gitolite/src中有gl xxx命令,是的,如果我手动运行脚本,传入refname,则执行良好,它只是没有被执行,或者在我将代码提交到该repo上的分支时以某种方式失败,因为有一个
    post receive.mirrorpush
    symlink,这就是我使用
    .secondary
    文件名的原因。关于将钩子放在
    /hooks/common/
    中,我明确希望这个钩子只在提交到单个存储库时生效,而我认为公共位置的钩子会在提交到任何存储库时触发repository@user1459145不您应该使用.secondary,因为有一个
    post-receive.mirrorpush
    :文档很清楚:“作为
    post-receive.mirrorpush
    发货,它被重命名为“
    post-receive
    ”,并作为镜像设置的一部分安装”:如果您没有看到“
    post-receive
    ”,您可以创建自己的镜像。感谢您的澄清。但是,我已将该文件移动到“接收后”,并运行了第二次提交,但仍然没有看到创建的临时文件。@user1459145您是否在该脚本中添加了回音,以查看是否至少调用了该文件?您是否首先通过再次运行
    gl setup
    将脚本符号链接到所有repo?感谢您的坚持不懈。回音就在那个剧本里,是的。因此,脚本的正确主位置是
    /hooks/common/post-receive
    ,并且只有当该repo具有从
    /hooks/post-receive
    /hooks/common/post-receive
    的符号链接时,它才会对给定的存储库实际执行,这就是我使用
    .secondary
    文件名的原因。关于将钩子放入
    /hooks/common/
    ,我明确地希望这个钩子只用于