根据手册,post-checkout
挂钩在git checkout
之后(正如预期的那样)运行,但也在git clone
之后运行(除非您通过--no-checkout
)。< / p>
很好,现在,考虑以下因素:
git clone
--template
一起使用的自定义模板目录中的git clone
在post-checkout
之后,似乎不可能执行git clone
挂钩。尽管如此,http://git-scm.com/docs/githooks上的githooks
手册页明确指出了一种避免执行的方法,并且在执行时也传递了参数,这表明可以在{{{}}之后执行自定义钩子。 {1}}。
那么,怎么可能呢?我显然在这里遗漏了一些东西。
结果
答案 0 :(得分:15)
我想您可以进行自定义安装 - 重命名.../share/git-core/templates/hooks
中的挂钩以删除.sample
后缀。
您还可以将一个充满符号链接的模板目录创建到存储库中的hooks目录(例如post-checkout -> ../../hooks/post-checkout
)。然后,如果克隆的repo包含该特定的钩子,它就会被执行。
你是对的,但在大多数情况下都不会发生。
编辑:我刚刚对其进行了测试,--template
选项似乎确实保留了权限,因此这是一种更加直接的方式来实现它。你看到什么表明它剥离了那一点?
对版本的最终决定权:您正在网上查看有关比您正在使用的更新版本的git的文档。这个功能是在dfa7a6c中添加的(克隆:签出时运行post-checkout hook); git describe说直到v1.6.2-rc2才包括它。
答案 1 :(得分:10)
运行 git-init 时,会将少量示例挂钩复制到新存储库的
hooks
目录中,但默认情况下它们都被禁用。要启用挂钩,请通过删除其.sample
后缀来重命名。
此初始化是在创建克隆时发生的,请注意builtin-clone.c
中对init_db
的调用。
例如:
$ cat /tmp/my-git-template/hooks/post-checkout #! /bin/bash echo "Hello from $0" $ git clone --template=/tmp/my-git-template file:///tmp/repo.git my-clone Initialized empty Git repository in /tmp/my-clone/.git/ remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. Hello from .git/hooks/post-checkout