【问题标题】:git post-commit hook not executedgit post-commit 钩子未执行
【发布时间】:2013-02-27 13:15:14
【问题描述】:

我正在尝试使用here 描述的方法将git 提交数据包含到 LaTex 文档中。

钩子看起来像这样:

$ cat post-commit 
#!/bin/sh

cd ../..

git log -1 --format="format:\
                \\gdef\\GITAbrHash{%h}\
                \\gdef\\GITHash{%H}\
                \\gdef\\GITAuthorDate{%ad}\
                \\gdef\\GITAuthorName{%an}" >> git.tex

当我执行chmod a+x post-commit 然后./post-commit 时,会正确生成文件。但是,当我实际提交时,不会执行钩子。可能是什么问题?

【问题讨论】:

    标签: git bash githooks


    【解决方案1】:

    我猜问题是你 cd ../.. 是为了导航到你的来源。

    尝试将cd ../.. 替换为pushd ../..。调用git log后,恢复popd的目录


    除此之外:我怀疑提交后挂钩是否是您想要的:如果您成功提交,git.tex 将在之后更改并且您有一个修改过的文件。

    预提交钩子会是更好的选择:在提交之前,钩子被调用,修改git.tex,然后将其添加到提交中。

    另一种选择是为您的git.tex 文件 (http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Keyword-Expansion) 设置 smudgeclean 过滤器。每次你要做发布之类的事情时,只需做一个

    git add git.tex
    

    这将调用生成git.tex 内容的clean 过滤器。此内容将被发送到 repo。 smudge 过滤器将在文件被签出时运行。它的职责是让文件为空,所以它只是

    echo '' > git.tex
    

    【讨论】:

    • 非常感谢您的回答,但事实并非如此;查看我的编辑。
    • 您的编辑最好是对您自己问题的回答,而不是对您的问题的编辑。
    【解决方案2】:

    问题是我不需要做cd ../..,因为无论如何代码都是在存储库的根目录中执行的。另一个错误是>> git.tex,当然应该是> git.tex

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2013-01-06
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 2011-11-16
      相关资源
      最近更新 更多