我的客户端git版本是1.7.0.4。
我想在提交消息时在提交日志消息的末尾自动为提交者添加“签名 - 关闭”行。
git config --global format.signoff true
并运行git commit -m "modify something"
时,我在git log
中看不到“已签名”。git commit -m -s "modify something"
,则“{1}}会显示”已签名“。有人可以帮忙吗?
答案 0 :(得分:13)
您可以通过创建一个文件(例如“〜/ 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的传统方式。)
答案 1 :(得分:6)
Git 2.14.x / 2.15的更新:正如我在“Git - Detect if commit is signed off programmatically”中提到的,您将能够解析Signed-off-By
行的提交消息预告片。
“
git interpret-trailers
”已经被教授了一个“--parse
”和一些其他选项,以便脚本更容易从提交日志消息中获取现有的预告片行。
请stefanct answer查看commit-msg
client-side hook使用git interpret-trailers
的内容。
原始答案(2013)
format.signoff
为about patch(如图所示,in this patch):
format.signoff
一个布尔值,可让您默认启用
format-patch
的-s / - signoff选项
与git commit -s
无关。
换句话说,您不必签署每次提交,但是当您将其作为补丁发布给其他人使用时(如“git: submitting patches”),然后您应该签名。
有关Signed-of-by
的确切含义,请参阅“What is the Sign Off feature in Git for?”。
答案 2 :(得分:6)
现在有一种简单的方法可以使用挂钩和git-interpret-trailers
命令自动注销尚未注销的任何提交。在即将发布的git 2.15版本中,该命令允许轻松检查现有的签名(无论其价值/作者是什么),如果还没有,则添加你的签名。截至2017年10月,任何git版本中所需的代码不(但在其master
分支中)!
将以下内容保存为.git/hooks/prepare-commit-msg
或.git/hooks/commit-msg
(有关差异,请参阅here)并将其设为可执行文件。
#!/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"