跟踪.git / hooks中钩子的变化

时间:2010-12-16 02:46:16

标签: git githooks

有没有办法跟踪git hook的变化?我有三个钩子只出现在我的机器上,而不是当我的其他开发人员拿到时。尝试git add不起作用。

6 个答案:

答案 0 :(得分:39)

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

  

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

答案 1 :(得分:11)

我意识到这个问题已经存在了很多年,但是我觉得这对于像我这样结束的旅行者来说需要说明:钩子没有被设计跟踪!布莱恩的答案是有效的,但与此相关的是你有效地信任你正在使用的其他人,不要将恶意代码放入存储库,然后你的钩子就会毫无疑问地执行;这是安全漏洞的定义。

答案 2 :(得分:3)

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

如果您有任何具有写入权限的用户使用'#!/ bin / sh rm -rf~'创建一个钩子(例如,提交后)。你的主目录。 (或者更好的东西,但仍然是愚蠢的。)

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

更新:如下所述,如果您计划更改钩子,可以创建一个包装脚本来复制文件,然后运行提交。然而,自动提交(使用git add和输入自动消息)非常麻烦。更好的想法是让你的一个钩子复制到这个' git_hooks'目录,在提交之前。这样恶意用户就无法提交将在下一次挂钩调用中运行的文件。

答案 3 :(得分:2)

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

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

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

最后,这个脚本可以受版本控制,你不必处理里面的钩子文件夹.git

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

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

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