如何强制“git commit -m”打开编辑器

7

我正在为团队实施git模板提交消息。我通过.git/hooks/prepare-commit-msg钩子完成了这个过程,添加了一行:

cat ".gitmessage" >> "$1"

另外,我已经配置了以下内容:

git config --local commit.template .gitmessage

好吧,模板功能完美运行,但只有在没有-m标志的情况下才有效。

不幸的是,所有团队成员的工作流程都是:

git add ...
git commit -m "Some message"

问题:如何强制Git总是打开编辑器以编辑消息,即使通过git commit -m ...命令调用?

5
使用“-m”的主要目的是可以跳过打开编辑器的步骤,直接内联定义信息。 - Tim
1
我会禁止他们直接推入上游主分支,并要求他们创建拉取请求。如果提交信息不符合质量标准,则拒绝该拉取请求。 - hek2mgl
你可以将模板保存在名为“template”的文件中,然后运行“git commit -F template”以从该文件中获取提交消息。这是你解决方案的另一种选择,但-m本身意味着你想跳过编辑器。 - love
你可以使用一个 precommit 钩子,只允许多行提交消息。这样,使用 -m 就会变得非常繁琐 :) - Paulo Bu
(1) 嗯,团队自动化的整个目的就是让它变得……自动化。另一种选择是通过电子邮件或口头要求所有团队成员遵循新的提交信息指令。 (2) 我们仍然直接将代码推送到Git服务器而没有进行审核。 - KostaZ
2个回答

10

-e 打开编辑器。

git commit -m "message" -e

1
你可以修改commit-msg预钩子来实现此操作。例如,您可以检查提交消息中的行数(请参见下面的示例);使用一些正则表达式来检查模板是否被遵守等。
#!/bin/bash

# Check if the number of lines is greater than 3
commit_msg_file="${1}"
minimum_lines=3
num_lines=$(wc -l "${commit_msg_file}" | cut -f1 -d' ')

if (( $num_lines < $minimum_lines )); then
    echo >&2 "Error!"
    exit 1
fi

请参考thisthis进行检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接