我创建了几个(Git for Windows 2.6.2 64位)repos,并以相同的方式开始使用 :
git init --bare <repoName>.git
。在尝试为这些克隆的repos添加一个公共post-commit
钩子时,我注意到只有一些有一个.git/hooks
目录。为什么呢?
我挖掘了关于丢失.git/hook
目录的问题/答案,并且没有在SO或更广泛地找到任何内容。重新初始化的Git文档mentions确保(.git/hooks/
).sample
文件在默认情况下是可执行的;但我真的找不到任何似乎可以解释为什么我的克隆回购有时包含.git/hooks
而有时却没有。{/ p>
谁能在这里发挥作用的原因和效果?感谢。
答案 0 :(得分:4)
git存储库中定义的钩子始终是此存储库的本地。它们不是git历史的一部分,在克隆,获取或推送时不会被转移。
因此,只需用钩子克隆现有的repo,克隆repo就不会有上游钩子。您必须手动将它们添加到克隆的存储库中。
This question解释了一些可以帮助您实现这一目标的选项。
答案 1 :(得分:0)
由于git钩子在克隆等时没有被传输,因此很多时候钩子被定义在一个单独的目录中(在.git目录之外,没有被克隆或传输)。
这主要是团队项目和开源回购的情况。因此,他们可能有一些脚本(例如在他们的Makefile
中)正在删除本地.git/hooks
并添加一些包含钩子的其他目录(例如,在repo的根目录中为.githooks
)。
这是可能的,因为您可以轻松配置git以将core.hooksPath
配置变量设置为托管挂钩目录,例如:
git config core.hooksPath .githooks
答案 2 :(得分:0)