为什么 .git/hooks 有时会在克隆的存储库中丢失?
Why is .git/hooks sometimes missing in cloned repos?
我有几个(Git for Windows 2.6.2 64-bit)我创建并开始使用相同方式的回购:
- 运行
git init --bare <repoName>.git
在 Git Bash.
- 使用 SourceTree 克隆新的存储库。
- 添加并提交初始文件(通过 SourceTree 或 EGit)。
- 废话,废话,废话....
在尝试向这些克隆的存储库添加通用 post-commit
挂钩时,我注意到 只有其中一些具有 .git/hooks
目录 。为什么?
我搜索了 questions/answers 关于丢失的 .git/hook
目录,但没有在 SO 或更广泛的地方找到任何东西。 Git 文档 mentions 回购初始化确保 (.git/hooks/
) .sample
文件默认可执行;但我真的找不到任何似乎可以解释为什么我的克隆回购有时包含 .git/hooks
有时不包含的内容。
谁能阐明这里的因果关系?谢谢。
git 存储库中定义的挂钩始终位于该存储库的本地。它们不是 git 历史的一部分,并且在克隆、获取或推送时不会传输。
因此,只需克隆一个带有钩子的现有仓库,克隆仓库就会有 none 个上游钩子。您必须手动将它们添加到克隆的存储库中。
This question 解释了一些可帮助您实现此目的的选项。
由于 git 挂钩在克隆等时不会传输,因此很多时候挂钩是在单独的目录中定义的(在 .git 目录之外,该目录未被克隆或传输) .
这主要是团队项目和开源存储库的情况。因此他们可能有一些脚本(例如在他们的 Makefile
中)正在删除本地 .git/hooks
并添加一些其他包含挂钩的目录(例如 .githooks
在 repo 的根目录中)。
这是可能的,因为您可以轻松配置 git 以将 core.hooksPath
配置变量设置为您的托管挂钩目录,例如:
git config core.hooksPath .githooks
几年后我会发布这个。
这看起来确实像是 SourceTree 的东西(正如上面 Jason 所理论的那样)。更具体地说,如果使用 SourceTree 中的 Embedded Git
。如果我使用 System Git
(我在 Mac 上),则会创建 hooks
目录并填充示例。通过命令行克隆会产生相同的结果。使用Embedded Git
时,则没有hooks
目录。
偏好设置中 git
选项的屏幕截图,您可以在其中 select 两者之间。
我有几个(Git for Windows 2.6.2 64-bit)我创建并开始使用相同方式的回购:
- 运行
git init --bare <repoName>.git
在 Git Bash. - 使用 SourceTree 克隆新的存储库。
- 添加并提交初始文件(通过 SourceTree 或 EGit)。
- 废话,废话,废话....
在尝试向这些克隆的存储库添加通用 post-commit
挂钩时,我注意到 只有其中一些具有 .git/hooks
目录 。为什么?
我搜索了 questions/answers 关于丢失的 .git/hook
目录,但没有在 SO 或更广泛的地方找到任何东西。 Git 文档 mentions 回购初始化确保 (.git/hooks/
) .sample
文件默认可执行;但我真的找不到任何似乎可以解释为什么我的克隆回购有时包含 .git/hooks
有时不包含的内容。
谁能阐明这里的因果关系?谢谢。
git 存储库中定义的挂钩始终位于该存储库的本地。它们不是 git 历史的一部分,并且在克隆、获取或推送时不会传输。
因此,只需克隆一个带有钩子的现有仓库,克隆仓库就会有 none 个上游钩子。您必须手动将它们添加到克隆的存储库中。
This question 解释了一些可帮助您实现此目的的选项。
由于 git 挂钩在克隆等时不会传输,因此很多时候挂钩是在单独的目录中定义的(在 .git 目录之外,该目录未被克隆或传输) .
这主要是团队项目和开源存储库的情况。因此他们可能有一些脚本(例如在他们的 Makefile
中)正在删除本地 .git/hooks
并添加一些其他包含挂钩的目录(例如 .githooks
在 repo 的根目录中)。
这是可能的,因为您可以轻松配置 git 以将 core.hooksPath
配置变量设置为您的托管挂钩目录,例如:
git config core.hooksPath .githooks
几年后我会发布这个。
这看起来确实像是 SourceTree 的东西(正如上面 Jason 所理论的那样)。更具体地说,如果使用 SourceTree 中的 Embedded Git
。如果我使用 System Git
(我在 Mac 上),则会创建 hooks
目录并填充示例。通过命令行克隆会产生相同的结果。使用Embedded Git
时,则没有hooks
目录。
偏好设置中 git
选项的屏幕截图,您可以在其中 select 两者之间。