在预提交挂钩期间运行时,Git的shortlog命令失败

时间:2012-08-26 20:19:23

标签: git shell

我试图使用Git预提交挂钩来运行一些样式检查并自动生成一个AUTHORS文件,该文件使用git shortlog提取所有贡献者的名字。

我的预提交脚本包含以下内容:

#!/bin/sh
set -e

bin/update-authors.sh
...

update-authors.sh文件包含以下内容:

#!/bin/sh
set -e

# Get a list of authors ordered by number of commits
# and remove the commit count column
AUTHORS=$(git --no-pager shortlog -nse | cut -f 2-)
if [ -z "$AUTHORS" ] ; then
    echo "Authors list was empty"
    exit 1
fi

# Display the authors list and write it to the file
echo "$AUTHORS" | tee "$(git rev-parse --show-toplevel)/AUTHORS"

后一个脚本可以直接在终端上正常工作,但只有在预提交挂钩期间,才会出现错误,并且#34;作者列表为空"。我无法弄清楚它为什么会这样做 - 任何想法?

1 个答案:

答案 0 :(得分:2)

我认为在执行pre-commit挂钩时,git会使树处于半分离状态,这就是为什么它没有得到任何东西。如示例预提交钩子所示,您需要显式传递一些分支/提交,例如:

AUTHORS=$(git --no-pager shortlog -nse HEAD | cut -f 2-)