可以将Git钩子脚本与存储库一起管理吗?

Pat*_*otz 298 git githooks

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

有没有一种好方法可以帮助每个人获得正确的钩子脚本?我可以让这些钩子脚本指向我的仓库中的版本控制脚本吗?

Max*_*eld 189

Git 2.9中,配置选项core.hooksPath指定自定义钩子目录.

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

git config core.hooksPath hooks
Run Code Online (Sandbox Code Playgroud)

通常,路径可以是绝对路径,也可以是相对于运行钩子的目录(通常是工作树根;请参阅说明部分man githooks).

  • ...和指向的钩子目录可以是单独的钩子存储库;) (14认同)
  • 那么,当你进行git克隆时,这个配置参数会自动设置吗? (7认同)
  • 通常,git配置变量不能由您正在克隆的存储库设置.我认为这是为了防止执行任意代码.git config通过挂钩,提交消息上的用户名和其他重要功能来控制代码的执行. (3认同)
  • 如果团队中有人对另一个分支执行 git checkout 怎么办?他们必须将其包含在每个分支中.. (3认同)

mip*_*adi 138

从理论上讲,您可以hooks使用所有脚本在项目目录中创建一个目录(或您喜欢的任何名称),然后将它们符号链接.git/hooks.当然,每个克隆了repo的人都必须设置这些符号链接(尽管你可能会非常喜欢并且有一个部署脚本,克隆人可以运行它来半自动设置它们).

  • 这是非常重要的,所以我要包含一个关于如何正确符号链接的链接:http://stackoverflow.com/questions/4592838/symbolic-link-to-a-hook-in-git (35认同)
  • git version 2.9现在有一个配置选项,用于`core.hooksPath`来设置.git之外的文件以链接到hooks文件夹. (13认同)

Sha*_*non 23

对于的NodeJS用户一个简单的解决方案是更新的package.json

{
  "name": "name",
  "version": "0.0.1",
  ......
  "scripts": {
    "preinstall": "git config core.hooksPath hooks", 
Run Code Online (Sandbox Code Playgroud)

预安装将前运行

安装

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

想象一下 Maven 和其他构建工具将有一个与preinstall等效的工具。

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

如果您需要更多信息,请参阅https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/


cer*_*cem 15

我想将几个答案合并为一个。假设您在project/目录中:

\n

设置您的自定义挂钩

\n
    \n
  1. 创建.githooks目录并将您的钩子放入其中。(参见.git/hooks示例)

    \n
  2. \n
  3. 创建一个.gitconfig指向目录\xc2\xb9的文件:

    \n
    git config -f .gitconfig core.hooksPath .githooks\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. Makefile在您的:\xc2\xb2中创建以下规则

    \n
    enable-git-hooks:\n    git config --local include.path ../.gitconfig\n    $(warning REMEMBER, YOU MUST HAVE REVIEWED THE CUSTOM HOOKS!)\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
\n

启用您的自定义挂钩

\n

每个开发人员都应该在检查这些自定义挂钩后明确启用它们。在自述文件中添加一条指令,如下所示:

\n
\n

通过查看自定义挂钩后启用它们make enable-git-hooks

\n
\n

  • “Makefile”是什么意思?这个问题与语言无关。 (3认同)
  • 有人可能会说 Makefile 与语言无关。 (3认同)

kil*_*anc 13

如果您的项目是一个JavaScript项目并且您npm用作包管理器,则可以使用shared-git-hooks来强制执行githooks npm install.

  • 现在我知道是谁在将这些废话添加到.git / hooks中。 (3认同)
  • 警告 - 不支持 Windows(除非它在 ​​git bash 中以管理员身份运行)。简单的解决方案是在 package.json 中添加 "preinstall": "git config core.hooksPath hooks" 作为脚本。即其中 hooks 是包含 git 脚本的文件夹。 (2认同)

小智 5

如何git-hooks,它将.git/hooks调用路由到项目目录下的脚本githooks.

还有很多功能可以让您最大限度地减少复制和符号链接挂钩.


yur*_*s87 5

大多数现代编程语言,或者更确切地说,它们的构建工具,都支持管理git hook的插件。这意味着您只需要配置package.json,pom.xml等,团队中的任何人就别无选择,除非他们更改构建文件。该插件将为您添加内容到.git目录。

例子:

https://github.com/rudikershaw/git-build-hook

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks