git使用format.signoff无法正常添加签名

时间:2013-02-22 02:32:27

标签: git format config

我的客户端git版本是1.7.0.4。

我想在提交消息时在提交日志消息的末尾自动为提交者添加“签名 - 关闭”行。

  1. 当我设置git config --global format.signoff true并运行git commit -m "modify something"时,我在git log中看不到“已签名”。
  2. 如果我使用git commit -m -s "modify something",则“{1}}会显示”已签名“。
  3. 有人可以帮忙吗?

3 个答案:

答案 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.signoffabout 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"