Min*_*oth 197 git gnupg public-key-encryption
是否有一种简单的方法可以让Git始终标记每个创建的提交或标记?
我尝试过类似的东西:
alias commit = commit -S
但那并没有成功.
我不想安装其他程序来实现这一目标.它可以轻松实现吗?
只是一个侧面的问题,也许不应该提交提交,只有标签,我从不创建,因为我为Homebrew等项目提交单一提交.
Von*_*onC 249
注意:如果您不想一直添加-S以确保您的提交已签名,那么就会有一个提案(目前为分支" pu,2013年12月,因此无法保证它会进入git版本)以添加配置将为您处理该选项.
2014年5月更新:它在Git 2.0中(在此补丁系列中重新发送之后)
见提交2af2ef3由尼古拉斯·Vigier(boklm) :
commit.gpgsign选项以对所有提交进行签名如果您想要GPG签署所有提交,您必须
-S始终添加该选项.
该commit.gpgsign配置选项允许签署所有自动提交.
commit.gpgsign
Run Code Online (Sandbox Code Playgroud)
一个布尔值,用于指定是否所有提交都应进行GPG签名.
在执行诸如rebase之类的操作时使用此选项可能会导致大量提交被签名.使用代理可能很方便避免多次输入GPG密码.
该配置通常按每个仓库设置(您不需要签署您的私人实验本地回购):
cd /path/to/repo/needing/gpg/signature
git config commit.gpgsign true
Run Code Online (Sandbox Code Playgroud)
您可以将其与user.signingKey用作全局设置的组合(用于您要签署提交的所有仓库的唯一密钥)
git config --global user.signingkey F2C7AB29
Run Code Online (Sandbox Code Playgroud)
user.signingKey在git 1.5.0(2007年1月)中使用commit d67778e引入:
不应该要求我在我的git存储库和gpg密钥中使用相同形式的名称.
此外,我的密钥环中可能有多个密钥,并且可能希望使用与我在提交消息中使用的地址不匹配的密钥.该补丁添加了一个配置条目"
user.signingKey",如果存在,它将被传递给gpg的"-u"开关,允许覆盖标签签名密钥.
这与强制执行承诺aba9119为了赶在那里如果用户错误配置的情况下(GIT 1.5.3.2)user.signingKey在他们的.git/config或根本就没有自己的钥匙圈任何密钥.
笔记:
signingKey不是signingkey,即使git config键不区分大小写.只有你这样做才有意义git config --get-regexp,这是区分大小写的,否则,它只是一个可读性约定;git push --signed没有考虑user.signingKey配置值;user.signingKey强制签署带注释的标签以及提交:commit 61c2fe0.Fel*_*ipe 154
git config --global user.signingKey 9E08524833CB3038FDE385C54C0AFCCFED5CDE14
git config --global commit.gpgSign true
Run Code Online (Sandbox Code Playgroud)
用您的密钥ID替换9E08524833CB3038FDE385C54C0AFCCFED5CDE14.请记住:使用短ID绝不是一个好主意.
更新:根据新的git edict,所有配置密钥都应该在camelCase中.
sim*_*ont 48
编辑:作为Git版本1.7.9,它是可能签署的Git提交(git commit -S).稍微更新答案以反映这一点.
问题标题是:
有没有办法用GG密钥在Git中"自动签名"提交?
简答:是的,但不要这样做.
解决问题中的拼写错误:git commit -s不签署提交.相反,从man git-commit页面:
-s, - signoff
在提交日志消息的末尾由提交者添加签名.
这给出了类似于以下内容的日志输出:
± $ git log [0:43:31]
commit 155deeaef1896c63519320c7cbaf4691355143f5
Author: User Name
Date: Mon Apr 16 00:43:27 2012 +0200
Added .gitignore
Signed-off-by: User Name
Run Code Online (Sandbox Code Playgroud)
注意"Signed-off-by:..."位; 那是由-s国旗上的旗帜产生的git-commit.
引用发布公告电子邮件:
- "git commit"学会了"-S"到GPG签署提交; 这可以通过"git log"的"--show-signature"选项显示.
所以是的,你可以签署提交.但是,我个人敦促谨慎使用这个选项; 自动签名提交旁边没有意义,见下文:
只是一个侧面的问题,也许提交不应该签名,只有标签,我从来没有创建,因为我提交单一提交.
那是对的.提交没有签署; 标签是.其原因可以在Linus Torvalds的这条消息中找到,其中最后一段说:
签署每个提交都是完全愚蠢的.它只是意味着您自动化它,并使您的签名价值更低.它也没有添加任何实际值,因为SHA1的git DAG链的工作方式,你只需要一个 签名来使那个可以从那个提交的所有提交有效地覆盖.所以签署每个提交只是错过了重点.
我鼓励浏览链接的消息,这清楚地说明了为什么签名提交自动不是一个好主意,而且方式要好得多.
但是,如果要自动签署标记,则可以通过将git-tag -[s|u]别名包装在一个别名中来实现; 如果你要这样做,你可能想要设置你的密钥ID ~/.gitconfig或项目特定的.git/config文件.有关该过程的更多信息可以在git社区书中看到.签名标签比签署每个提交更有用.
blu*_*ray 16
首先设置您要用来签署所有提交、标签和推送的公钥。要获取公钥,请使用以下命令
% gpg --list-keys --keyid-format=short
/home/blueray/.gnupg/pubring.kbx
-------------------------------
pub rsa3072/F6EED39A 2021-12-25 [SC] [expires: 2023-12-25]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,公钥是F6EED39A。现在运行以下命令。
git config --global user.signingkey F6EED39A
git config --global commit.gpgSign true // sign all commits
git config --global tag.gpgSign true // sign all tags
git config --global push.gpgSign true // sign all push
Run Code Online (Sandbox Code Playgroud)
请注意,如果使用push.gpgSign true,如果服务器不支持签名推送,推送将会失败。另一种方法是使用:
git config --global push.gpgSign "if-asked"
Run Code Online (Sandbox Code Playgroud)
也就是说,如果服务器支持,则对所有推送进行签名。
现在,您的所有提交、标签和推送都将由您给定的公钥自动签名。
有时您可能需要覆盖这些设置。
对于提交,请使用git commit --no-gpg-sign -m "Unsigned commit"
对于标签,请使用git tag --no-sign <tag-name>
对于推送,请使用git push --no-signed或, --signed=false。
要在git 2.0版之前进行自动签名工作,您必须为commit添加git别名.
# git config --global alias.commit commit -S
[alias]
commit = commit -S
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55871 次 |
| 最近记录: |