我们想做一些基本的钩子脚本,大家都可以共享——比如预先格式化提交消息。Git有钩子脚本,通常存储在<project>/. Git /hooks/下。但是,当人们进行克隆时,这些脚本不会传播,并且它们不受版本控制。

是否有一种好方法可以帮助每个人获得正确的钩子脚本?我能不能让那些钩子脚本指向我的repo中的版本控制脚本?


当前回答

您可以使用托管解决方案来进行预提交钩子管理,例如预提交。 或者为服务器端git-hook提供集中式解决方案,如date .io。 它有内置的策略,如:

检测和防止秘密的合并。 执行正确的Git用户配置。 强制Jira票集成-在拉请求名称/提交消息中提到票号。

它不会替换所有的钩子,但它可以帮助开发人员使用最明显的钩子,而不必在每个钩子上都安装钩子 开发人员的电脑/回购。

免责声明:我是Datrees创始人之一

其他回答

理论上,您可以在项目目录中创建一个包含所有脚本的hooks目录(或任何您喜欢的名称),然后将它们符号链接到.git/hooks中。当然,克隆该回购的每个人都必须设置这些符号链接(尽管您可以有一个非常出色的部署脚本,克隆程序可以运行该脚本半自动地设置它们)。

要在*nix上执行符号链接,你所需要做的就是:

root="$(pwd)"
ln -s "$root/hooks" "$root/.git/hooks"

如果您准备覆盖.git/hooks中的内容,请使用ln -sf

对于Node.js用户来说,一个简单的解决方案就是更新包。json和

{
  "name": "name",
  "version": "0.0.1",
  ......
  "scripts": {
    "preinstall": "git config core.hooksPath hooks",

preinstall将在之前运行

npm安装

并重定向Git以查找。\hooks(或任何您选择的名称)目录中的钩子。这个目录应该模仿。\。Git \挂钩在文件名(减去.sample)和结构方面。

设想Maven和其他构建工具将具有与预安装相当的功能。

它还应该适用于所有平台。

如果需要更多信息,请参阅与团队共享Git钩子的两种方法。

我目前正在我们的代码库中工作,我遇到了一个名为husky的库,它简化了如何在团队中使用和共享GitHub Hooks。我强烈建议你调查一下。

使用git-hooks。它将.git/hooks调用路由到项目目录githooks下的脚本中。

还有很多功能,使您能够最大限度地减少复制和符号链接钩子到处。

在Git 2.9中, 配置选项核心。hooksPath指定自定义钩子目录。

将钩子移动到存储库中的钩子跟踪目录。然后,配置存储库的每个实例来使用跟踪的钩子,而不是$GIT_DIR/hooks:

git config core.hooksPath hooks

通常,路径可以是绝对的,或者相对于钩子运行的目录(通常是工作树的根;参见man githooks的描述部分)。