31

我的客户端 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",则“签名人”确实会显示在git log.

任何人都可以帮忙吗?

4

3 回答 3

37

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"
于 2017-10-03T02:14:29.773 回答
21

默认情况下,您可以通过创建一个包含一些空行和已签名文本的文件(例如“~/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 的传统方式)。

于 2016-01-08T23:29:22.980 回答
14

Git 2.14.x/2.15 的更新:正如我在“ Git - Detect if commit is signed off programmatically ”中提到的,您将能够解析Signed-off-By一行的提交消息预告片。

" git interpret-trailers" 被教导了一个 " --parse" 和其他一些选项,以使脚本更容易从提交日志消息中获取现有的预告片行。

请参阅stefanct对将使用的客户端钩子回答commit-msggit interpret-trailers


原始答案(2013)

format.signoff关于补丁的(例如,在这个补丁中):

format.signoff

一个布尔值,允许您format-patch默认启用 -s/--signoff 选项

它与git commit -s.

换句话说,您不必签署每个提交,但是当您将它们发布为供其他人使用的补丁时(如“ git:提交补丁”),那么您应该签署它们。

有关 的确切含义Signed-of-by,请参阅“ Git 中的 Sign Off 功能是做什么用的? ”。

于 2013-02-22T07:20:32.897 回答