正在挂起git commit消息而无需换行

问题描述 投票:0回答:2

我正在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"

知道我缺少什么吗?

git githooks
2个回答
0
投票

不要将您的echo语句发送给cat。而是在回显字符串中使用cat语句的命令替换:

echo "text $(cat $COMMIT_MSG_FILE)" > /tmp/out && mv /tmp/out $COMMIT_MSG_FILE

0
投票

echo打印换行符。使用不使用的命令:根据您的echo -n年份,可能为echo,或者如果您有printf,则为:

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

dGot14U's method using command substitution也可以。还考虑使用就地sed

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

[当-i是否需要单独的空字符串参数''时,如此处所示,取决于OS:MacOS sed要求一个,Linux sed禁止一个。我已经在脚本中使用过这个:

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然后扩展为正确的内容。

© www.soinside.com 2019 - 2024. All rights reserved.