首页 > 解决方案 > 在 git hook 中添加多行消息

问题描述

我正在使用prepare-commit-message钩子将自定义多行消息附加到我的提交中。此消息来自不同的来源。

我的钩子文件内容如下:

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

MESSAGE=$(some_command)

if [ -z ${2+x} ]; then
    sed -i.back "1s/^/$MESSAGE \n/" "$1"
fi

这适用于MESSAGE单行文本。但是当它是多行时,我得到

unescaped newline inside substitute pattern.

echo $MESSAGE会给我类似的东西:

aaaa
bbbb

基本上,我想做的是每当我提交时,提交消息应该包含:

<here i will enter my commit message>

aaaa
bbbb
# Please enter the commit message for your changes. Lines starting
...

标签: bashgitsed

解决方案


那里不需要 Sed。您应该能够通过这种方式避免所有这些问题:

mv $1 $1.back
(echo $MESSAGE ; cat $1.back) > $1

使用 sed,如果不对 $MESSAGE 中的换行符进行复杂的 ANSI-C 引用,似乎没有简单的方法可以解决该问题,请参见例如这个Stack Overflow 帖子。


推荐阅读