git add Signed-off-by line using format.signoff not working

3hvapo4f  于 2023-06-28  发布在  Git
关注(0)|答案(4)|浏览(143)

我的客户端git版本是1.7.0.4。
当提交一条消息时,我想在提交日志消息的末尾自动为提交者添加一个“Signed-off-by”行。
1.当我设置git config --global format.signoff true并运行git commit -m "modify something"时,我在git log中看不到“Signed-off-by”。
1.如果我使用git commit -m -s "modify something",那么git log中会显示“Signed-off-by”。
有人能帮忙吗?

xhv8bpkk

xhv8bpkk1#

现在有一种简单的方法可以通过使用hook和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"
ui7jx7zq

ui7jx7zq2#

默认情况下,你可以在项目中创建一个文件(比如“~/MYPROJECT/git-template”),其中包含一些空行和如下的signed-off-by文本:

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)。

5kgi1eie

5kgi1eie3#

Git 2.14.x/2.15更新:正如我在“Git - Detect if commit is signed off programmatically”中提到的,你将能够解析Signed-off-By行的提交消息尾部。
git interpret-trailers”已经被教导了一个“--parse”和一些其他选项,以使脚本更容易从提交日志消息中抓取现有的尾部行。
参见stefanctanswer,了解使用git interpret-trailerscommit-msg客户端钩子。
原始答案(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?”。

iyfamqjs

iyfamqjs4#

要自动将--signoff/-s选项添加到您在git仓库中进行的所有提交:

cd <REPO>
cp .git/hooks/prepare-commit-msg.sample .git/hooks/prepare-commit-msg
edit .git/hooks/prepare-commit-msg

然后取消注解最后一个代码块:

SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
if test -z "$COMMIT_SOURCE"
  then
    /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
fi

相关问题