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