用于更新工作目录的任何操作的Git钩子

时间:2013-08-23 02:10:35

标签: git githooks

在回答previous question后,我实现了一个Git钩子脚本,每当工作目录更新时都需要触发。我将此脚本链接到.git / hooks中的以下内容:

  • 结账交
  • 后提交
  • 后合并

这主要起作用,但并非总是如此。我找到的一个案例是git stash。这是一个问题,因为我的钩子生成了一个文本文件,我也用git update-index --assume-unchanged标记告诉Git我不想签入更改(签入一个空版本)。但是,git stash将恢复假定未更改的文件(到空文件),这意味着钩子需要再次运行,但在git stash之后不会调用钩子。

我怀疑git rebase也可能存在类似的问题,但这并不容易解释。

我想要一个Git将在更新工作目录后总是运行的钩子。这可能吗?

1 个答案:

答案 0 :(得分:1)

不确定git stash pop(我在“Is there a way with to prevent “git stash pop” from marking files as modified?”中提供了一些替代方案。)

git update-index附带了另一个选项--skip-worktree,可能会避免git存储问题 请参阅“Git - Difference Between 'assume-unchanged' and 'skip-worktree'


但对于git rebase,您可能会对 post-rewrite hook 感兴趣:

  

这个钩子由重写提交的命令调用(git commit --amendgit-rebase;当前git-filter-branch没有调用它!)。
  它的第一个参数表示它被调用的命令:当前是修改或rebase之一。将来可能会传递更多与命令相关的参数。

     

钩子接收stdin上重写提交的列表,格式为

<old-sha1> SP <new-sha1> [ SP <extra-info> ] LF
  

extra-info再次依赖于命令。如果为空,则也省略前面的SP。目前,没有命令传递任何额外信息。