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

有办法追踪 git hook 的变化吗?我有三个钩子,它们只出现在我的机器上,而不会在其他开发人员获取时出现。尝试 git add不起作用。

13378 次浏览

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

中的文件。Git/hook 目录不是存储库的一部分,因此不会跟踪它们。一种解决方案是像在 Arora 和 symlink 中那样,在存储库顶部放置一个 git _ hook 目录。Git/hooks 到 git _ hooks。通过这种方式,钩子将成为项目的一部分,在修订控制之下,并且对每个人都是可访问的。

我意识到这个问题已经有好几年了,但是我觉得像我这样的旅行者应该说: 钩子不是按照设计来追踪的!布莱恩的回答会起作用,但问题在于,你实际上相信与你一起工作的每个人都不会把恶意代码放到存储库中,然后你的钩子就会毫无疑问地执行这些代码; 这就是安全漏洞的定义。

修改布莱恩的回答,以考虑到菲利普的重点:

如果您有任何具有写访问权限的用户,该用户使用’# 创建了一个钩子(比如,post-commit) !/bin/sh rm-rf ~’这是您的主目录。(或者是一些更温和但仍然愚蠢的东西。)

为了防止这种情况,最好不要对目录进行符号链接,而是将它们手动地复制到 git _ hooks 目录或从 git _ hooks 目录复制。是的,您必须记住在更新这些文件时手动复制它们,但这总比什么都不做要好,而且您仍然不能让用户级别的人员访问您机器上的命令。

更新: 如下所述,如果您计划更改您的钩子一堆,您可以使包装器脚本复制文件,然后运行提交。然而,自动化提交(使用 git add 和输入自动化消息)确实很麻烦。一个更好的主意是,在提交之前,让您的一个钩子复制到这个‘ git _ hooks’目录。这样,恶意用户将无法提交将在下一个钩子调用上运行的文件。

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

我不确定你的人多久会进行一次编辑,但是你可以将这个模板保存在一个所有人都可以访问的回购中。真的,这应该是一个钩子,运行一个文件中的回购,其中包含所有的代码,你需要自动运行。

正如其他人所提到的,一旦执行未知代码,就会自动将自己置于风险之中。

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

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

例如: 在 Web 应用程序的情况下,假设您可以在包 json 中添加一个脚本,该脚本将配置 pre 提交钩子!

下面是一个很好的例子: Https://github.com/typicode/husky

最后,这个脚本可以在版本控制下,您不必处理钩子文件夹内。饭桶