Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用GPG签署git提交_Git_Gnupg_Pgp_Git Sign - Fatal编程技术网

用GPG签署git提交

用GPG签署git提交,git,gnupg,pgp,git-sign,Git,Gnupg,Pgp,Git Sign,有没有办法用gpg签署git提交?使用标记非常简单(使用-s而不是-a),似乎也有类似的提交功能。git commit-s(需要git>=1.7.9)。注意:始终添加-s选项可能会很麻烦。 在Git2.0及更高版本中,您可以添加一个配置,该配置将为您处理该选项 见: 添加commit.gpgsign选项对所有提交进行签名 如果要对所有提交进行GPG签名,则必须始终添加-S选项。 commit.gpgsignconfig选项允许自动签署所有提交 一个布尔值,用于指定是否所有提交都应进行GPG签名。

有没有办法用gpg签署git提交?使用标记非常简单(使用
-s
而不是
-a
),似乎也有类似的提交功能。

git commit-s
(需要git>=1.7.9)。

注意:始终添加
-s
选项可能会很麻烦。
在Git2.0及更高版本中,您可以添加一个配置,该配置将为您处理该选项

见:

添加
commit.gpgsign
选项对所有提交进行签名 如果要对所有提交进行GPG签名,则必须始终添加
-S
选项。
commit.gpgsign
config选项允许自动签署所有提交

一个布尔值,用于指定是否所有提交都应进行GPG签名。
在执行诸如rebase之类的操作时使用此选项可能会导致签署大量提交。使用代理可以避免多次键入GPG密码短语

如评论所述:


要在命令行上全局设置此选项,请执行以下操作:


使用Git 2.27(2020年第2季度),“
Git rebase
”学习了“
--无gpg标志
”选项,以取消用户可能拥有的
提交.gpgSign

参见,,,(2020年4月3日)by.
(于2020年4月22日合并)

:荣誉
--在任何情况下均无gpg标志
签字人:Đoán TrầnôCôDanh

{cherry pick,revert}--编辑尚未生效--还没有gpg标志

将此选项向下传递以尊重它


请注意,在使用非默认合并策略重放合并或重放八达通合并时,“()”未将
--gpg sign
命令行选项正确传递给基础“
git merge
”(因为使用默认策略重放双头合并是在一个单独的代码路径中完成的,所以大多数用户不会触发该问题),Git 2.30(2021年第1季度)已经纠正了这一点

参见(2020年10月18日)by.
(于2020年11月2日合并)

:fix gpg选项传递给merge子命令 签字人:SamuelČavoj

当使用
-s
指定的自定义策略或八达通合并执行带
-rebase merges
的重基时,同时启用
gpgsign
(重基
-s
或配置
提交.gpgsign
),该操作将在进行合并提交时失败

与替换密钥id的“
-S%S
”不同,只有裸密钥id会被传递到底层merge命令,该命令试图将其解释为ref

按照Johannes Schindelin和Junio C Hamano的建议修复问题并添加测试用例

以及:

:将显式
--无gpg符号传递给
合并

签字人:SamuelČavoj

为使用非默认策略进行合并而启动的merge子命令将使用其自身的默认行为来决定如何对提交进行签名,而不管
opts->gpg\u sign
设置为什么。
例如,如果
commit.gpgsign
被设置为
true
,则显式提供给rebase的
--no gpg sign
标志将被忽略

修复此问题并添加一个测试用例来执行此行为

固定在:

“”()在使用非默认合并策略重放合并或重放八达通合并时,未正确地将
--gpg sign
命令行选项传递给基础“
git merge
”(因为使用默认策略重放双头合并是在单独的代码路径中完成的,因此大多数用户不会触发此问题),已根据Git 2.30(2021年第1季度)进行了更正

参见(2020年10月18日)by.
(于2020年11月2日合并)

:修复传递给
merge
子命令的
gpg
选项 签字人:SamuelČavoj

当使用
-s
指定的自定义策略或八达通合并执行
rebase
时,同时启用
gpgsign
(或者
rebase-s
或者config
commit.gpgsign
),操作将无法进行合并提交。
与替换密钥id的“
-S%S
”不同,只有裸密钥id会被传递到底层merge命令,该命令试图将其解释为ref

按照Johannes Schindelin和Junio C Hamano的建议修复问题并添加测试用例


为什么要对每个提交进行签名?如果对标记进行签名,则也会对从该标记可访问的所有提交进行签名(因为父ID包含在每个提交的哈希中)。对每个提交进行签名并没有什么好处。@不,提交不会被签名,但它们仍然可以被信任,因为在不破坏标记签名的情况下,您无法更改它们。@magname:不。从最初提交到现在没有可访问的提交。它只会反过来工作。如果您对最新提交进行签名(有一个签名标记指向它)在此之前的所有提交(父级/祖先级)自动受信任。签署每次提交的一个原因是要有更有力的证据证明提交实际上来自您认为提交的人。签署标记只允许您检测历史是否已更改。我发现,仅签署标记的问题是,对于不是linux内核开发人员的人来说,这将非常简单对于那些使用你的名字和电子邮件的提交,以及那些与你自己所做的无法区分的提交的人来说。对于像github这样的社交编码网站,你为许多不同的项目做出了贡献,如果突然出现坏的/恶意的代码,上面有你的名字,并且没有办法阻止你,这可能会严重影响你的声誉从您实际做的事情中调用它。=)或等效地
gpg commit--gpg sign
。您还可以使用
gpg commit--gpg sign=DEADBEEF
指定一个键。我通过查看源代码发现了这一点;它似乎没有文档记录。这将解释
commit.gpgsign
git config --global commit.gpgsign true