为什么在这个git hook示例的末尾使用exec似乎不必要? 退出状态一般

问题描述

我正在使用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 (将#修改为@)