有没有一种方法可以使用gpg签署git提交?对于标签来说非常简单(使用-s
而不是-a
),看起来应该有类似的功能可以用于提交。
有没有一种方法可以使用gpg签署git提交?对于标签来说非常简单(使用-s
而不是-a
),看起来应该有类似的功能可以用于提交。
-S
选项可能很麻烦。在git 2.0及更高版本中,您可以添加一个配置文件来为您处理该选项。commit.gpgsign
选项以签署所有提交如果您想要GPG签署所有提交,您必须始终添加
-S
选项。
commit.gpgsign
配置选项允许自动签署所有提交。
commit.gpgsign
git config --global commit.gpgsign true
git rebase
”学会了“--no-gpg-sign
”选项,以取消用户可能设置的commit.gpgSign
。
请查看 commit 5c5bac1,commit 4369d3a,commit 9da37fe,commit ae06ba6,commit cf0ad4d,commit c241371(于2020年4月3日由Đoàn Trần Công Danh (``)提交)
(合并自Junio C Hamano -- gitster
--在commit fc3f6fd中,于2020年4月22日)
cherry-pick/revert
: 在所有情况下都尊重--no-gpg-sign
签名:Đoàn Trần Công Danh
{cherry-pick,revert} --edit 迄今未尊重 --no-gpg-sign。
将此选项传递给
git commit
以予以尊重。
git rebase --rebase-merges
"(man) 在使用非默认合并策略重播合并或重播八爪鱼合并时,未能正确传递--gpg-sign
命令行选项给底层的"git merge
"(因为使用默认策略重播双头合并在单独的代码路径中完成,所以这个问题并没有对大多数用户触发),这已经在Git 2.30 (Q1 2021)中得到了修正。
查看 commit 43ad4f2, commit 19dad04, commit ae03c97 (2020年10月18日) 由Samuel Čavoj (sammko
)提交。
(合并自Junio C Hamano -- gitster
--在commit 73af6a4,2020年11月2日)
顺序执行器
:修复传递给合并子命令的 gpg 选项签名:Samuel Čavoj
当使用
--rebase-merges
进行变基时,使用自定义策略指定-s
或章鱼合并,并且同时启用gpgsign
(无论是重做-S
还是配置commit.gpgsign
),操作会在创建合并提交时失败。与使用密钥 ID 替换的 "
-S%s
" 不同,只传递裸密钥 ID 给底层合并命令,底层合并命令尝试将其解释为引用。修复此问题并按 Johannes Schindelin 和 Junio C Hamano 的建议添加测试用例。
以及:
序列控制器
:在合并
中显式传递--no-gpg-sign
签署者:Samuel Čavoj
对于使用非默认策略进行合并的合并子命令,它会使用自己的默认行为来决定如何签署提交,而不管
opts->gpg_sign
设置为什么。
例如,如果将--no-gpg-sign
标志明确给rebase,则会被忽略,如果commit.gpgsign
设置为true
。修复此问题,并添加一个测试用例来测试此行为。
已修复:
"\"git rebase --rebase-merges
\"(man) 没有正确地将 --gpg-sign
命令行选项传递给底层的 \"git merge
\",当使用非默认合并策略回放合并或回放八爪鱼合并时(因为使用默认策略回放双头合并是在一个单独的代码路径中完成的,所以大多数用户没有触发问题),这已经在 Git 2.30(2021年第一季度)中得到了修正。
查看 commit 43ad4f2, commit 19dad04, commit ae03c97 (2020年10月18日) 由 Samuel Čavoj (sammko
) 提交。
(由 Junio C Hamano -- gitster
-- 合并于 commit 73af6a4, 2020年11月2日)
sequencer
: 修正传递给 merge
子命令的 gpg
选项签名作者: Samuel Čavoj
当使用自定义策略指定的 -s
或者章鱼合并进行 --rebase-merges
的 rebase
操作,并且同时启用了 gpgsign
(通过 rebase -S
或配置文件 commit.gpgsign
),则该操作在创建合并提交时会失败。
与其将带有替换键 ID 的 "-S%s
" 一起传递,只会传递裸的键 ID 给底层的合并命令,该命令会试图将其解释为引用。
修复该问题并按照 Johannes Schindelin 和 Junio C Hamano 的建议添加测试用例。
git config --global commit.gpgSign true
。 - Apteryxconfig.gpgsign=true
,而不是执行单独的 git config --global commit.gpgsign false
,然后再执行 git config --global commit.gpgsign true
? - Chris.Wilsoncd /path/to/repo; git config commit.gpgsign false
)。或者你可以在命令级别暂停它:git -c commit.gpgsign=false xxx
。两者都将优先于全局设置。 - VonCgit commit -S
(需要 git >= 1.7.9):最初的回答。
gpg commit --gpg-sign
。您也可以使用 gpg commit --gpg-sign=DEADBEEF
来指定密钥。我是通过查看源代码发现的,似乎没有记录在文档中。 - Keith Thompson--gpg-sign
设为git commit
的默认选项? - Hongligit commit
创建的提交。例如,如果您执行了一个变基,并希望签署它创建的所有新提交,则别名无法让您执行此操作。我所知道的唯一方法是进行交互式变基并手动签署每个提交。对于非快进合并,情况类似,除非您执行 git merge --no-commit ...
,否则合并提交将不会被签署。 - Patrick Niedzielski