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

Ven*_*nus 16 git format config

我的客户端git版本是1.7.0.4.

我想在提交消息时在提交日志消息的末尾为提交者自动添加"Signed-off-by"行.

  1. 当我设置git config --global format.signoff true并运行时git commit -m "modify something",我看不到"签名关闭"了git log.
  2. 如果我使用git commit -m -s "modify something",那么"Signed-off-by"会显示出来git log.

有人可以帮忙吗?

小智 14

您可以通过创建一个文件(例如"〜/ MYPROJECT/git-template")在项目中默认签收,该文件包含一些空行和签名关闭文本,如下所示:

Signed-off-by: Your Name <your.email@example.com>
Run Code Online (Sandbox Code Playgroud)

然后配置git以将其用作提交模板.例如:

git config commit.template ~/MYPROJECT/git-template
Run Code Online (Sandbox Code Playgroud)

确保您的项目文档在某个地方签署项目的签约方式.这里有一些文本可以复制到您的CONTRIBUTING.md文件中:

所有贡献(包括拉取请求)必须同意开发人员原产地证书(DCO)1.1版.这与Linux内核开发人员创建和使用的内容完全相同,并发布在http://developercertificate.org/上.这是开发人员的认证,他或她有权提交补丁以包含在项目中.简单地提交贡献意味着此协议,但是,请在每个补丁中包含"签名 - 签署"标记(此标记是确认您同意DCO的传统方式).


ste*_*nct 11

现在有一种简单的方法可以使用挂钩和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"
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是较新版本的 git(我使用的是 2.25.x),则 `&lt;your-repo&gt;/.git/hooks/prepare-commit-msg.sample` 附带了用于签名的代码(已注释) 。您需要“cpprepare-commit-msg.sampleprepare-commit-msg”并取消注释以“SOB=$(git var GIT_AUTHOR_IDENT...”开头的行以及后面的行。使用“chmod”使文件可执行+x &lt;your-repo&gt;/.git/hooks/prepare-commit-msg` 就可以了。 (4认同)
  • 做得很好。+1。我在我的文章中引用了您的答案以获取更多可见性,并引用了/sf/answers/2895289141/,其中提到了“ git interpret-trailers”。 (2认同)

Von*_*onC 6

更新Git 2.14.x/2.15:正如我在" Git - 检测提交是否以编程方式签名 "中提到的,您将能够解析提交消息预告片Signed-off-By行.

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

stefanct回答commit-msg客户端钩它将使用git interpret-trailers.


原始答案(2013)

format.signoff关于补丁(例如,在此补丁中说明):

format.signoff
Run Code Online (Sandbox Code Playgroud)

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

它没有任何影响git commit -s.

换句话说,您不必签署每个提交,但是当您将它们作为补丁发布给其他人使用时(如" git:submitting patches "),那么您应该签名.

有关确切含义Signed-of-by,请参阅" Git中的 " 注销功能是什么? ".