是否有一种简单的方法可以让Git始终标记每个创建的提交或标记?
我尝试了类似的东西:
alias commit = commit -S
但这并没有成功。
我不想安装其他程序来实现这一目标。是否可以轻松实现?
只是一个侧面的问题,也许提交不应该签名,只有标签,我从不创建,因为我提交像Homebrew等项目的单一提交。
答案 0 :(得分:236)
注意:如果您不想一直添加-S
以确保您的提交已签名,则会有一个提案(目前为分支“pu
”,2013年12月,所以没有保证它会使它成为一个git版本)添加一个配置,它将为你处理该选项
2014年5月更新:它位于Git 2.0中(在resend in this patch series之后)
commit 2af2ef3见Nicolas Vigier (boklm):
commit.gpgsign
选项以对所有提交进行签名如果您想要GPG签署所有提交,则必须始终添加
-S
选项。
commit.gpgsign
配置选项允许自动签署所有提交。
commit.gpgsign
一个布尔值,用于指定是否所有提交都应该进行GPG签名 在执行诸如rebase之类的操作时使用此选项可能会导致大量提交被签名。使用代理可能很方便避免多次输入GPG密码短语。
该配置通常按每个仓库设置(您不需要签署私人实验本地回购):
cd /path/to/repo/needing/gpg/signature
git config commit.gpgsign true
您可以将其与用作全局设置的user.signingKey
相结合(用于您要签名提交的所有仓库的唯一键)
git config --global user.signingkey F2C7AB29
user.signingKey
:
不应要求我使用相同形式的名字 我的git存储库和我的gpg密钥。
此外,我的密钥环中可能有多个密钥,并且可能希望使用与我在提交消息中使用的地址不匹配的密钥。此补丁添加配置条目“
user.signingKey
”,如果存在,将传递给gpg的“-u”开关,允许覆盖标记签名密钥。
这是使用commit aba9119(git 1.5.3.2)强制执行的,以便了解如果用户在user.signingKey
中配置错误.git/config
或者没有任何秘密的情况钥匙圈上的钥匙。
注意:
signingKey
, not signingkey
,即使git config
键不区分大小写。只有当你执行git config --get-regexp
时,这才有意义, 区分大小写,否则,它只是一个可读性约定; git push --signed
未能考虑user.signingKey
配置值; user.signingKey
强制签署带注释的标记以及提交:commit 61c2fe0。答案 1 :(得分:141)
git config --global user.signingKey 9E08524833CB3038FDE385C54C0AFCCFED5CDE14
git config --global commit.gpgSign true
用您的密钥ID替换9E08524833CB3038FDE385C54C0AFCCFED5CDE14。请记住:It's never a good idea to use the short ID。
更新:每a new git edict,所有配置密钥都应该在camelCase中。
答案 2 :(得分:48)
编辑:从Git 1.7.9开始,it is possible签署Git提交(git commit -S
)。稍微更新答案以反映这一点。
问题标题是:
有没有办法用GG密钥在Git中“自动设置”提交?
简短回答:是的,但不要这样做。
解决问题中的拼写错误:git commit -s
未签署提交。相反,来自man git-commit
页面:
-s, - 签名
在提交日志消息的末尾由提交者添加签名。
这给出了类似于以下内容的日志输出:
± $ 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
注意“Signed-off-by:...”位;由-s
上的git-commit
标志生成的。
- “git commit”学会了“-S”到GPG签名提交;这可以显示出来 使用“git log”的“--show-signature”选项。
所以是的,你可以签署提交。但是,我个人敦促谨慎使用这个选项; 自动签名提交是毫无意义的,见下文:
只是一个附带问题,也许提交不应该签名,只有标签,我从不创建,因为我提交单一提交。
这是对的。提交没有签署;标签是。可以在Linus Torvalds的此消息中找到原因,其中最后一段说明:
签名 每次提交都是完全愚蠢的。它只是意味着你自动化它,而你 使签名价值更低。它也没有增加任何实际价值,因为 SHA1的git DAG链的工作方式,你只需要一个 签名使所有提交的提交都有效 被那个人覆盖。所以签署每个提交只是错过了重点。
我鼓励浏览链接的消息,该消息明确了为什么签名提交自动不是一个好主意,而且方式要好得多。
但,如果您想自动签署标记,您可以通过将git-tag -[s|u]
包装在别名中来实现;如果您要这样做,您可能希望在~/.gitconfig
或项目特定的.git/config
文件中设置密钥ID。有关该流程的更多信息,请参阅git community book。签名标签比签署每个提交更有用。
答案 3 :(得分:5)
要在git 2.0版之前进行自动签名工作,您必须为提交添加git别名。
# git config --global alias.commit commit -S
[alias]
commit = commit -S
答案 4 :(得分:0)
您需要明确指出,如果您签署提交或标记,则表示您并不意味着您批准了整个历史记录。在提交的情况下,您只需签署手头的更改,如果是标记,那么......您需要定义它的含义。您可能已经撤消了声称它来自您的更改但是没有(因为其他人将其推送到您的遥控器)。或者这是一个你不想进入的变化,但你刚刚签署了标签。
在典型的OSS项目中,这可能不太常见,但在企业场景中,您只是偶尔触摸代码而您不会阅读整个历史记录,这可能会被忽视。
签署提交是一个问题,如果他们将得到重新安排或挑选给其他父母。但如果修改后的提交可以指向实际验证的“原始”提交,那将是件好事。