我正在用git-commit
测试git commentChar=auto
,用于必须出于某些目的模拟git-commit
的库。
如果我运行git commit -m "#message"
,然后进行第二次提交,打开编辑器以编辑消息, 评论仍标有#
。这是为什么呢?
根据文档:
core.commentchar
提交和标记等命令,可让您编辑 消息考虑以注释的此字符开头的行, 并在编辑器返回后将其删除(默认 #(。
如果设置为"auto",git-commit 将选择一个不是 现有提交消息中任何行的开头字符。
但是当我运行测试脚本时:
git config --global core.commentChar auto
touch foo
git add foo
git commit -m '#message'
touch bar
git add bar
git commit # opens editor, And I see:
# Please enter the commit message // Wrong! This should not use the # char.
根据 git 存储库中的某些测试,如果它"评论"的消息已经包含注释字符,它仅应用此"自动"方法。 文档中的现有提交消息引用(在这种情况下(修改后的消息(或者在变基压制的情况下,几个提交消息(。
您可以在 commit.c 中看到处理方式:这里
它查看即将显示的当前缓冲区,并选择"#;@!$%^&|:"
中的第一个作为潜在的注释字符和其他错误。
当它说"现有的提交消息"时,它并不意味着以前提交的消息;检查所有以前的消息是不切实际的。它表示在调用编辑器之前尚未在当前消息中使用的字符。这似乎是多余的——如果你还没有写消息,为什么它需要检查任何东西?但是有很多方法可以拥有现有消息,包括:
- 你在做
git commit --amend
. - 您正在执行
git merge
并且消息已预先填充。 - 您已设置
commit.template
配置变量,或者正在使用--template
选项git commit
。
无论如何,core.commentChar = auto
的目的是扫描预先存在的消息以查找行首字符,并选择不会冲突的字符。