githooks-跟踪.git / hooks中的钩子更改

有没有办法跟踪git hook的变化? 我有三个仅在我的机器上显示的钩子,而不是在其他开发人员获取时显示的钩子。 尝试git add不起作用。

Hans asked 2020-02-29T11:13:42Z
6个解决方案
44 votes

[HTTP://Benjamin-Meyer.blogspot.com/2008/10/git-hooks.HTML]

.git / hooks目录中的文件不属于存储库的一部分,因此不会被跟踪。 一种解决方法是像在Arora中一样在存储库的顶部放置一个git_hooks目录,并在每次克隆时将.git / hooks链接到git_hooks。 这样,挂钩将成为项目的一部分,受版本控制,并且每个人都可以访问。

Brian Clapper answered 2020-02-29T11:14:41Z
14 votes

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

Philip Adler answered 2020-02-29T11:15:02Z
4 votes

修改Brian的答案以考虑到Philip的重要观点:

如果您具有写访问权限的任何用户都使用'#!/ bin / sh rm -rf〜'创建了一个挂接(例如,提交后),则会进入您的主目录。 (或者更温和但仍然愚蠢的东西。)

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

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

jpmorris answered 2020-02-29T11:15:36Z
2 votes

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

Maj. Dave answered 2020-02-29T11:15:56Z
2 votes

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

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

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

最后,该脚本可以在版本控制下,您无需处理.git中的hooks文件夹。

Frix G answered 2020-02-29T11:16:30Z
0 votes

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

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

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

shug answered 2020-02-29T11:17:00Z
translate from https://stackoverflow.com:/questions/4457031/tracking-changes-to-hooks-in-git-hooks