68

有没有办法跟踪 git hook 的变化?我有三个只显示在我的机器上的钩子,而不是当我的其他开发人员获取时。试图这样git add做是行不通的。

4

6 回答 6

53

http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html

.git/hooks 目录中的文件不是存储库的一部分,因此不会被跟踪。一种解决方法是在存储库顶部有一个 git_hooks 目录,就像在 Arora 中所做的那样,并在克隆时将 .git/hooks 符号链接到 git_hooks。这样,钩子将成为项目的一部分,处于修订控制之下,每个人都可以访问。

于 2010-12-16T03:11:59.330 回答
21

我意识到这个问题已经存在多年了,但我觉得对于像我这样最终来到这里的旅行者来说,这需要说一下:钩子不是按设计跟踪的!Brian 的回答会奏效,但要解决的问题是,您实际上是在信任与您一起工作的其他所有人,不会将恶意代码放入存储库中,然后您的钩子会毫无疑问地执行;这就是安全漏洞的定义。

于 2014-05-20T22:27:27.970 回答
8

恢复这个旧线程,您可以拥有一个单独的版本控制目录,其中包含您的钩子,然后使用该git config core.hooksPath目录来定位该目录。

于 2017-09-25T23:45:38.710 回答
3

修改布赖恩的答案以考虑菲利普的重点:

如果您有任何具有写访问权限的用户使用 '#!/bin/sh rm -rf ~' 创建一个钩子(例如,提交后),那么您的主目录就会出现。(或者也许是更温和但仍然愚蠢的东西。)

为了防止这种情况,最好不要对目录进行符号链接,而是手动将它们复制到 git_hooks 目录或从 git_hooks 目录复制。是的,您必须记住在更新这些文件时手动复制这些文件,但总比没有好,而且您仍然没有授予某人用户级别的访问权限以访问您机器上的命令。

更新:如下所述,如果你打算改变你的钩子一堆,你可以制作一个复制文件然后运行提交的包装脚本。然而,自动提交(使用 git add 并输入自动消息)确实很麻烦。一个更好的主意是让你的一个钩子在提交之前复制到这个“git_hooks”目录。这样恶意用户将无法提交将在下一次挂钩调用时运行的文件。

于 2015-03-09T22:21:05.690 回答
2

另一种解决方案(与跟踪/版本控制无关)可能是使用为您处理挂钩的插件。

例如:对于一个 Web 应用程序,假设您可以在包 json 中添加一个脚本,该脚本将配置预提交挂钩!

这是一个很好的例子: https ://github.com/typicode/husky

最后,这个脚本可以在版本控制下,你不必处理 .git 中的 hooks 文件夹

于 2018-03-29T11:00:22.563 回答
0

使用模板目录。从 git clone 中,您可以使用标志--template=<template_directory>将文件添加到$GIT_DIR. 您还需要创建一个包含模板的目录或使用 gits 提供的 location /usr/share/git-core/templates。通过使用模板目录,您可以准备好一个活动钩子,以便从创建时在钩子目录中运行。

我不确定您的人员多久进行一次编辑,但是您可以将此模板保存在所有人都可以访问的存储库中。实际上,这应该是一个在 repo 中运行一个文件的钩子,该文件包含您需要自动运行的所有代码。

就像其他人提到的那样,一旦您自动执行未知代码,您就会面临风险。

于 2015-08-15T00:24:12.820 回答