Git 我的提交消息钩子-使用完整编辑器时,会将注释添加到提交消息中

Git 我的提交消息钩子-使用完整编辑器时,会将注释添加到提交消息中,git,Git,我想用我的分支名称自动在提交消息前加上方括号,例如: [TestHook] Test # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On [分支机构名称]进行了更改 这是我的提交消息钩子: #!/bin/sh # # Automatically adds branch

我想用我的分支名称自动在提交消息前加上方括号,例如:

[TestHook] Test # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On
[分支机构名称]进行了更改

这是我的提交消息钩子:

#!/bin/sh
#
# Automatically adds branch name and branch description to every commit message.
#
BRANCH=$(git symbolic-ref HEAD | awk -F'/' '{print $3}')

if [ -n "$BRANCH" ]; then
        echo ["$BRANCH"'] '$(cat "$1") > "$1"
fi
如果我使用git commit-am commit消息,这个钩子工作得很好。但是,如果我使用simply git commit来使用完整编辑器,我的提交消息会得到附加到它的注释,例如:

[TestHook] Test # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On
我从网上的一个例子中复制了commit-msg脚本,并根据自己的需要做了一些修改。但是,我不是bash脚本专家,所以我怀疑我的脚本有问题。希望能得到一些帮助


谢谢

您可以尝试更改提交消息模板,请参见:

编辑提交消息时,使用给定文件中的内容启动编辑器。 commit.template配置变量通常用于将此选项隐式地赋予命令

试试看:

git config commit.template /path/to/empty/commit/message/template

如果模板文件为空,您的git commit不应附加任何内容。

您可以尝试更改提交消息模板,请参阅:

编辑提交消息时,使用给定文件中的内容启动编辑器。 commit.template配置变量通常用于将此选项隐式地赋予命令

试试看:

git config commit.template /path/to/empty/commit/message/template

如果模板文件是空的,您的git commit不应该附加任何内容。

在谷歌搜索了很多次之后,我更正了我的脚本,使用grep而不是cat,现在它工作得很好:

#!/bin/sh
#
# Automatically adds branch name to every commit message.
#
BRANCH=$(git symbolic-ref HEAD | awk -F'/' '{print $3}')

if [ -n "$BRANCH" ]; then
        echo ["$BRANCH"'] '$(egrep -v '(^#|^\s*$|^\s*\t*#)' "$1") > "$1"
fi

grep命令不包括以空格/tab开头的行,或者以空格/tab开头的行,后面跟的不是完全必要的,但还是将其扔了进去。

在谷歌搜索了很多次之后,我更正了我的脚本,使用grep而不是cat,现在它工作得很好:

#!/bin/sh
#
# Automatically adds branch name to every commit message.
#
BRANCH=$(git symbolic-ref HEAD | awk -F'/' '{print $3}')

if [ -n "$BRANCH" ]; then
        echo ["$BRANCH"'] '$(egrep -v '(^#|^\s*$|^\s*\t*#)' "$1") > "$1"
fi

grep命令不包括以空格/tab开头的行,或者以空格/tab开头的行,后面跟的不是完全必要的,但无论如何都会把它扔进去。

这是一个很好的解决方法,但我希望首先找出commit msg脚本导致问题的原因。不过我会记住的,谢谢@因为它使用了默认的提交消息模板,所以它应该会导致问题。所以我尝试了这个方法,但是当我发出git commit时,消息模板仍然包含这些注释。我将模板设置为~/.gitmessage.txt,文件中只有一行内容是为了测试功能。当我发出git commit时,我看到:Something ^M请输入提交消息以进行更改。以开头的行将被忽略,空消息将中止提交。在分支TestHook上要提交的更改:modified:test_file_renamed.txt这是一个很好的解决方法,但我希望首先找出commit msg脚本导致问题的原因。不过我会记住的,谢谢@因为它使用了默认的提交消息模板,所以它应该会导致问题。所以我尝试了这个方法,但是当我发出git commit时,消息模板仍然包含这些注释。我将模板设置为~/.gitmessage.txt,文件中只有一行内容是为了测试功能。当我发出git commit时,我看到:Something ^M请输入提交消息以进行更改。以开头的行将被忽略,空消息将中止提交。分支上要提交的TestHook更改:modified:test_file_rename.txt Great catch。那么,提交消息模板根本就不涉及+1捕获量大。那么,提交消息模板根本就不涉及+1.