我的客户端 git 版本是 1.7.0.4。
我想在提交消息时在提交日志消息的末尾自动为提交者添加一个“签名人”行。
- 当我设置
git config --global format.signoff true
并运行git commit -m "modify something"
时,我在git log
. - 如果我使用
git commit -m -s "modify something"
,则“签名人”确实会显示在git log
.
任何人都可以帮忙吗?
git-interpret-trailers
现在有一种简单的方法可以使用钩子和命令自动签署任何尚未签署的提交。在即将发布的 git 2.15 版本中,该命令允许简单地检查现有的签核(无论其值/作者是什么),如果还没有,则添加您的签核。截至 2017 年 10 月,所需的代码尚未在任何 git 版本中(但在其master
分支中)!
将以下内容另存为.git/hooks/prepare-commit-msg
或.git/hooks/commit-msg
(有关差异,请参见此处)并使其可执行。
#!/bin/sh
NAME=$(git config user.name)
EMAIL=$(git config user.email)
if [ -z "$NAME" ]; then
echo "empty git config user.name"
exit 1
fi
if [ -z "$EMAIL" ]; then
echo "empty git config user.email"
exit 1
fi
git interpret-trailers --if-exists doNothing --trailer \
"Signed-off-by: $NAME <$EMAIL>" \
--in-place "$1"
默认情况下,您可以通过创建一个包含一些空行和已签名文本的文件(例如“~/MYPROJECT/git-template”)在项目中签名,如下所示:
Signed-off-by: Your Name <your.email@example.com>
然后配置 git 以将其用作提交模板。例如:
git config commit.template ~/MYPROJECT/git-template
确保您的项目在某处记录项目的签署方式。您可以将以下文本复制到您的 CONTRIBUTING.md 文件中:
所有贡献(包括拉取请求)都必须同意开发者原产地证书 (DCO) 版本 1.1。这与 Linux 内核开发人员创建和使用并发布在http://developercertificate.org/上的完全相同。这是开发人员的证明,表明他或她有权提交补丁以包含在项目中。只需提交贡献就意味着此协议,但是,请在每个补丁中包含“签名者”标签(此标签是确认您同意 DCO 的传统方式)。
Git 2.14.x/2.15 的更新:正如我在“ Git - Detect if commit is signed off programmatically ”中提到的,您将能够解析Signed-off-By
一行的提交消息预告片。
"
git interpret-trailers
" 被教导了一个 "--parse
" 和其他一些选项,以使脚本更容易从提交日志消息中获取现有的预告片行。
请参阅stefanct对将使用的客户端钩子的回答。commit-msg
git interpret-trailers
原始答案(2013)
format.signoff
是关于补丁的(例如,在这个补丁中):
format.signoff
一个布尔值,允许您
format-patch
默认启用 -s/--signoff 选项
它与git commit -s
.
换句话说,您不必签署每个提交,但是当您将它们发布为供其他人使用的补丁时(如“ git:提交补丁”),那么您应该签署它们。
有关 的确切含义Signed-of-by
,请参阅“ Git 中的 Sign Off 功能是做什么用的? ”。