首页 > 解决方案 > 在不换行的情况下添加 git commit 消息

问题描述

我在prepare-commit-msg钩子中使用这个衬线在提交消息之前添加一个自定义字符串:

echo "text " | cat - $COMMIT_MSG_FILE > /tmp/out && mv /tmp/out $COMMIT_MSG_FILE

不幸的是,每条提交消息都包含“文本”,然后是 CRLF,其余的提交消息在下一行。例如,如果提交消息是:"Commit 123",则新的提交消息将是

"text
Commit 123"

而不是"textCommit 123",这就是我想要的。

知道我缺少什么吗?

标签: gitgithooks

解决方案


echo打印换行符。使用不使用的命令:这可能是echo -n,取决于您的echo年份,或者printf,如果您有它,将执行以下操作:

echo -n "text " | cat - $COMMIT_MSG_FILE > /tmp/out && mv /tmp/out $COMMIT_MSG_FILE

dGot14U 使用命令替换的方法也有效。考虑使用 in-place sed

sed -i '' '1s/^/text /' $COMMIT_MSG_FILE

是否以及何时-i需要单独的空字符串参数'',如此处所示,取决于操作系统:MacOSsed需要一个,Linuxsed禁止一个。我在脚本中使用了这个:

if sed --version >/dev/null 2>&1; then
    # apparently this is gnu sed, so -i requires the extension attached
    sedinplace="-i"
else
    # apparently this is BSD/MacOS sed, so -i requires a separate argument
    sedinplace="-i ''"
fi
# ...
sed $sedinplace -e cmd1 -e cmd2 $file

然后$sedinplace扩展到正确的事情。


推荐阅读