37

根据手册,post-checkout钩子在 a 之后运行git checkout(正如预期的那样),但也在 a 之后运行git clone(除非你通过--no-checkout)。

很好,现在,考虑以下几点:

  • 您在 a 之前没有本地存储库git clone
  • 钩子在遥控器之间不同步
  • 存储在与一起使用的自定义模板目录中的钩子--template被复制为不可执行的,因此在之后执行git clone(正如 Jefromi 在他的回答中所说,这实际上不是真的,但钩子仍然没有执行)

在. post-checkout_ git clone尽管如此,http://git-scm.com/docs/githooksgithooks的手册页明确说明了一种避免它被执行的方法,以及在它被执行时传递的参数,这表明可以执行自定义钩子之后。git-clone

那么,怎么可能呢?我显然在这里遗漏了一些东西。

原来

4

2 回答 2

19

我想您可以进行自定义安装 - 重命名挂钩.../share/git-core/templates/hooks以删除.sample后缀。

您还可以创建一个包含符号链接的模板目录,指向存储库中的 hooks 目录(例如post-checkout -> ../../hooks/post-checkout)。然后,如果克隆的 repo 包含那个特定的钩子,它就会被执行。

但是,您是对的,但在大多数情况下,它不会发生。

编辑:我刚刚对其进行了测试,并且该--template选项似乎确实保留了权限,因此这是实现它的一种更直接的方法。你看到什么表明它剥离了那一点?

关于版本的最终决定:您正在在线查看文档以获取比您正在使用的新版本的 git。dfa7a6c 中添加了此功能(克隆:结帐时运行 post-checkout 挂钩);git describe 说直到 v1.6.2-rc2 才包括在内。

于 2010-01-26T18:11:51.367 回答
15

githooks 文档

运行git-init时,一些示例挂钩被复制到hooks新存储库的目录中,但默认情况下它们都被禁用。要启用挂钩,请通过删除其.sample后缀来重命名它。

此初始化作为创建克隆的一部分进行 - 请注意对init_dbin的调用builtin-clone.c

例如:

$ cat /tmp/my-git-template/hooks/post-checkout
#!/bin/bash
echo "你好,从 $0"

$ git clone --template=/tmp/my-git-template file:///tmp/repo.git my-clone
在 /tmp/my-clone/.git/ 中初始化空的 Git 存储库
远程:计数对象:3,完成。
远程:总计 3(增量 0),重用 0(增量 0)
接收对象:100% (3/3),完成。
你好来自 .git/hooks/post-checkout
于 2010-01-26T18:16:20.837 回答