【发布时间】:2012-04-30 23:12:19
【问题描述】:
我们想在外部数据库中存储一些关于提交的元信息。在克隆或结帐期间,应引用此数据库,我们将元信息复制到已克隆的 repo 中的文件中。数据库是必需的,而不仅仅是为了索引和搜索等而使用文件......
我想如果有一个克隆钩子,我们可以触发它。我在 .git/hooks 的示例中找不到克隆钩子。有吗?结帐后挂钩是客户端唯一的可能性吗?
【问题讨论】:
我们想在外部数据库中存储一些关于提交的元信息。在克隆或结帐期间,应引用此数据库,我们将元信息复制到已克隆的 repo 中的文件中。数据库是必需的,而不仅仅是为了索引和搜索等而使用文件......
我想如果有一个克隆钩子,我们可以触发它。我在 .git/hooks 的示例中找不到克隆钩子。有吗?结帐后挂钩是客户端唯一的可能性吗?
【问题讨论】:
当您克隆远程存储库时,您无法运行任何客户端挂钩,因为挂钩位于您的工作副本的本地,并且您是从头开始创建的。当您从远程存储库拉新更改时,git 将运行您本地的 post-merge 挂钩(如果存在)。
作为 pull 操作的结果,服务器上没有运行任何东西。 push 操作将触发服务器的 update 和 post-update 挂钩。
请参阅Git Book 了解更多信息。
【讨论】:
不,没有任何克隆钩子。
【讨论】:
好的,一种方法是使用clone --template 选项。
指定将客户端挂钩存储为--template 开关的值的位置。钩子被复制到克隆中,并立即触发 post-checkout 钩子!
【讨论】:
我迟到了,但有一个解决方法:
捕获git clone 执行并使用trap set_var_on_git_clone DEBUG 设置变量,其中set_var_on_git_clone 是用户定义的函数。 (例如https://gist.github.com/KeyAmam/a6afcabc3a724fc4a541aca7629c3ff6)
检查post-checkout 脚本中的变量并在案例中做一些事情。清除脚本末尾的变量。 (例如https://gist.github.com/KeyAmam/6a0e8805c0b6a662adb6bcf8118a089a)
这仅适用于 Bash,但您可以在其他 shell 中执行类似的操作。
【讨论】:
从 git 版本 1.6.3 开始,post-checkout 挂钩在 git-clone 上运行(在没有 --no-checkout 的情况下运行)。
它也在 git-clone[1] 之后运行,除非使用了 --no-checkout (-n) 选项。给钩子的第一个参数是 null-ref,第二个是新 HEAD 的 ref,flag 始终为 1。
【讨论】: