存储在项目中并安装在构建中
正如其他人在回答中所说,如果你的钩子是特定于你的特定项目的,那么将它们包含在项目本身中,由 Git 管理。我会更进一步地说,鉴于使用单个脚本或命令构建项目是一种很好的做法,因此应该在构建期间安装挂钩。
我写了一篇关于managing Git hooks 的文章,如果您有兴趣更深入地阅读此内容。
Java 和 Maven
完全免责声明;我编写了下面描述的Maven 插件。
如果您使用 Maven 为您的 Java 项目处理构建管理,则以下 Maven 插件将处理从项目中的某个位置安装挂钩。
https://github.com/rudikershaw/git-build-hook
将所有 Git 挂钩放在项目中的一个目录中,然后配置您的 pom.xml 以包含以下插件声明、目标和配置。
<build>
<plugins>
<plugin>
<groupId>com.rudikershaw.gitbuildhook</groupId>
<artifactId>git-build-hook-maven-plugin</artifactId>
<configuration>
<gitConfig>
<!-- The location of the directory you are using to store the Git hooks in your project. -->
<core.hooksPath>hooks-directory/</core.hooksPath>
</gitConfig>
</configuration>
<executions>
<execution>
<goals>
<!-- Sets git config specified under configuration > gitConfig. -->
<goal>configure</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- ... etc ... -->
</plugins>
</build>
当您运行项目构建时,该插件会将 Git 配置为在指定目录之外运行挂钩。这将为从事您项目的每个人有效地设置该目录中的挂钩。
JavaScript 和 NPM
对于 NPM,有一个名为 Husky 的依赖项,它允许您安装钩子,包括用 JavaScript 编写的钩子。
// package.json
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"pre-push": "npm test",
"...": "..."
}
}
}
其他
此外,还有许多不同的钩子管理应用程序/插件,包括用于 Python 项目的 pre-commit、用于 Ruby 项目的 Overcommit 和用于 Ruby 的 Lefthook或 Node.js 项目。