问题标签 [githooks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1053 浏览

git - Git 电子邮件挂钩以包含提交消息和更改的文件

我在 heroku 中为 git 设置了电子邮件挂钩。但是,我得到的只是推送消息的消息-我需要提交消息和修改后的文件。


0 投票
6 回答
12370 浏览

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

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

0 投票
1 回答
1525 浏览

git - git hooks - 重新生成一个文件并将其添加到每个提交中?

我想自动生成一个文件并将其添加到提交中(如果它已更改)。是否有可能,如果可以,我应该使用什么钩子?

上下文:我正在编写一个 CSS 库。它有几个 CSS 文件,最后我想生成一个压缩和最小化的版本。现在我的工作流程是:

  1. 修改css文件x.cssy.css
  2. git add x.css y.css
  3. Executeminimize.sh解析我的 lib 上的所有 css 文件,最小化它们并生成一个min.css文件
  4. git add min.css
  5. git commit -m 'modified x and y doing foo and bar'

我想通过 git hook 自动完成第 3 步和第 4 步。那可能吗?

我以前从未使用过 git 钩子。阅读手册页后,我想我需要使用pre-commit钩子。但是我可以调用git add min.css,还是会破坏互联网?

编辑:它奏效了!而且我没有创造一个黑洞或任何东西!

这是我的 .git/hooks/pre-commit 文件的代码:

该文档没有提到我必须使其可执行,否则它将无法工作。

如果您对我如何最小化感兴趣,我使用了juicer - 最小化命令是:

0 投票
6 回答
28875 浏览

linux - git中钩子的符号链接

我编写了自己的自定义合并后钩子,现在我在我的主项目文件夹中添加了一个“钩子”目录(因为 git 不跟踪 .git/hooks 中的更改),在某处我读到我可以从钩子中创建一个符号链接到 .git/hooks 所以我不必每次有人更改文件时都将文件从一个文件夹复制到另一个文件夹,所以我尝试了:

ln -s -f hooks/post-merge .git/hooks/post-merge

但它似乎不起作用,任何想法为什么?“ln hooks/post-merge .git/hooks/post-merge”工作正常,但制作硬链接与我猜的 copyin 相同....

0 投票
2 回答
1849 浏览

git - 编写拒绝无效子模块提交的 git update 钩子的最佳方法是什么?

我正在尝试update为 git 编写一个钩子,如果将子模块更新为子模块的上游存储库中不存在的提交 ID,该钩子会反弹。换句话说,我想强制用户在将更改推送到子模块指针之前将更改推送到子模块存储库。

一个警告:

  • 我只想测试其裸上游存储库与父存储库位于同一服务器上的子模块。否则我们开始不得不做一些疯狂的事情,比如在 git 钩子中调用 'git clone' 或 'git fetch',这不会很有趣。

我一直在玩一个想法,但感觉必须有更好的方法来做到这一点。这是我计划在更新挂钩中做的事情:

  1. 检查传递给钩子的 refname 以查看我们是否正在更新refs/heads/. 如果没有,请尽早退出。
  2. 用于git rev-list获取正在推送的修订列表。
  3. 对于每个修订:
    1. 调用git show <revision_id>并使用正则表达式来查看子模块是否已更新(通过搜索`+Subproject commit [0-9a-f]+)。
    2. 如果此提交确实更改了子模块,请获取该.gitmodules特定提交所看到的文件内容 ( git show <revision_id>:.gitmodules)。
    3. 使用 3.1 和 3.2 的结果来获取子模块 URL 及其更新的提交 ID 的列表。
    4. 对照将子模块 URL 映射到文件系统上的本地裸 git 存储库的外部文件检查 3.3 中创建的此列表。
    5. cd到 3.4 中找到的路径并执行git rev-parse --quiet --verify <updated_submodule_commit_id>以查看该提交是否存在于该存储库中。如果不是,则以非零状态退出。

(注意:我相信 3.2 的结果可能会跨版本缓存,只要输出git rev-parse --quiet --verify <revision_id>:.gitmodules不会从一个版本更改为下一个版本。我省略了这部分以简化解决方案。)

所以,是的,这看起来很复杂,我不禁想知道是否有一些内部 git 命令可以让我的生活更轻松。或者也许有不同的方式来思考这个问题?

0 投票
2 回答
1411 浏览

git - git pre-commit hook 可以将文件添加到 repo 吗?

我在我的工作目录中保留了我的 git 日志的文本文件,并且我有一个在提交后更新它的脚本。这很好,但这样做的效果是,repo 中的版本总是落后一个提交。

是否可以编写一个预提交钩子来调用脚本并将文件添加到存储库中,从而有效地保存日志的文本版本以及其中的当前提交信息?

我是 git hooks 的新手,不知道这将如何工作,如果可能的话。感谢您的帮助!

0 投票
2 回答
10244 浏览

git - 如何捕获 git 提交消息并运行操作

我是 git 新手,我希望能够在推送到源/主服务器后捕获提交消息,并根据字符串包含的内容运行 bash 脚本(在服务器上)。

例如,如果我的 git commit 消息说:[email] my commit message

如果提交消息包含[email]则执行指定的操作,否则不执行。

这是我正在考虑在post-receive挂钩中使用的示例 bash 脚本:

基本上我只需要知道提交消息的变量名是什么,在上面的 bash 脚本中使用?另外,我不确定这是否是正确的钩子。

0 投票
2 回答
4137 浏览

git - 列出 git post-merge 钩子中更改的文件

有没有办法让合并后挂钩获取合并更改的所有文件的列表,即使它是快进的?

0 投票
1 回答
547 浏览

git - 在 git 中使用 pre receive hook 来识别命令运行

有什么方法可以使用 HOOK 我可以找到从客户端运行的命令是什么。这应该包括从客户端发送的所有命令选项。

例如,我发现有一个名为 --mirror 的 push 选项(例如 git push --mirror),它将自动删除所有不在客户端机器中的分支,并尝试复制在客户端机器。

如果我可以创建一个预接收钩子,我可以在其中检查使用 git push 发送了哪些命令选项,我可以检查是否未使用 --mirror 选项并且拒绝该命令而不进行进一步处理。

任何帮助是极大的赞赏。谢谢戈皮

0 投票
5 回答
14364 浏览

git - Git post-receive钩子不起作用

我的设置是一个 Windows XAMPP 服务器,启用了 cURL,并安装了 Git 和 Hudson。Hudson 每分钟轮询一次 Git 以查找更改,如果找到更改,它会创建一个构建。我使用这个构建作为我的测试服务器。这工作正常。

我想在我的中央远程存储库上设置一个接收后挂钩,该存储库运行 Hudson 的强制构建功能。

我在我的中央 Git 存储库的 hooks 目录中创建了一个名为“post-receive”的 post-receive 文件,该文件是从开发人员的本地分支推送到的。他们每个人都推送到中央存储库上自己的分支。我想在每次推送后立即运行接收后构建,而不是让 Hudson 每分钟轮询 Git。

当我打开远程服务器的 shell 并在 hooks 文件夹中运行“post-receive”时,它就会运行。当人们从本地存储库副本推送到中央存储库副本时,它不会被调用。

也许我没有正确解释这一点,但这就是我理解 Git 的方式。

接收后代码为两行:

同样,当我打开一个 shell 并运行它时,它可以工作,但是当有人推到它时,什么也没有发生,直到一分钟或更短的时间过去,Hudson 意识到 Git 被改变了,然后它构建了。

如果需要,我很乐意澄清。任何帮助是极大的赞赏。

编辑:玩弄它之后,我觉得也许 post-receive 没有执行,因为 refs 没有被更新?git文档说

在所有 refs 都更新后,它会在远程存储库上执行一次。

这是否意味着如果没有更新,它将不会执行?如果是这样,我很确定无论如何事情都会更新,所以它不应该适用。

这是我的过程:在本地进行编辑。提交编辑。从我的 HEAD 推送到名为“mybranch”的远程分支(不是已签出的主分支)这是我希望我的钩子执行的点。