问题描述
我正在使用OSX(git version 2.24.3 (Apple Git-128)
)上随附的githooks pre-commit.sample。代码中有一些特殊之处,即与看似虚假的exec
有关。
预提交示例包含以下代码(删除了不相关的行/块):
#!/bin/sh
against=HEAD
# Redirect output to stderr.
exec 1>&2
# If there are whitespace errors,print the offending file names and fail.
exec git diff-index --check --cached $against --
如果我尝试通过在最后一个exec
调用之后附加验证来修改此代码,它将永远不会运行。根据{{3}},我了解exec
是什么导致了这种情况。
但是,我不明白为什么exec
首先需要发生。如果存在尾随空格,则此行的钩子失败,但是如果我删除exec
并直接调用git diff-index ...
,它的行为似乎相同。
换句话说,这是
git diff-index --check --cached $against --
...看起来像这样:
exec git diff-index --check --cached $against --
...除了后者似乎更具限制性。无论有没有exec
,我都找不到这个文件之间的区别,除了,exec
使之如此,以便空白检查具有最后发生。
当样本创建者看起来似乎与限制较少的直接调用具有相同的行为时,为什么会选择exec
选项呢?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)