如何使用git-crypt和多个密钥

cvxl0en2  于 12个月前  发布在  Git
关注(0)|答案(1)|浏览(107)

根据man page
git-crypt支持每个存储库有多个密钥,允许您与不同的协作者共享不同的文件。
这就是我想要完成的。我只希望某些合作者能够访问我代码的某些部分。
我希望能够控制谁可以访问哪个文件。每个人都使用一个公共密钥对我来说并不好,因为我希望有人能够访问文件#1,但不能访问文件#2,我希望其他人能够访问文件#2,但不能访问文件#1。

hsgswve4

hsgswve41#

我找到了here的答案:
除了隐式默认密钥外,git-crypt还支持替代密钥,可用于加密特定文件,并可与特定GPG用户共享。如果您希望授予不同协作者对不同文件集的访问权限,这将非常有用。
要生成名为KEYNAME的备用密钥,请按如下方式将-k KEYNAME选项传递给git-crypt init
git-crypt init -k KEYNAME
要使用备用密钥加密文件,请使用.gitattributes中的git-crypt-KEYNAME filter,如下所示:
secretfile filter=git-crypt-KEYNAME diff=git-crypt-KEYNAME
要导出备用密钥或与GPG用户共享,请将-k KEYNAME选项传递给git-crypt export-keygit-crypt add-gpg-user,如下所示:
git-crypt export-key -k KEYNAME /path/to/keyfile
git-crypt add-gpg-user -k KEYNAME GPG_USER_ID
要使用备用密钥解锁存储库,请正常使用git-crypt unlock。git-crypt将自动确定使用的是哪个密钥。

几个注意事项:

使用-k选项,* 而不是--key-name选项。我知道手册上说它们是一样的,但它们不是。有时候(我不知道为什么)--key-name选项会被忽略,你最终会使用默认键而不会有任何错误消息。
此外,我发现通过添加GPG用户来设置访问比共享对称密钥更容易。这是因为git-crypt会在你输入一个它不太理解的命令时使用默认密钥,并且你无法知道你刚刚用哪个密钥加密了数据,除非你推送更改,将密钥传输到另一台计算机,并测试看看哪个密钥有效。
但是如果您通过GPG添加协作者的公钥,您可以使用以下命令轻松查看谁被添加到了哪个密钥:

pushd .git-crypt/keys/KEYNAME/0; for file in *.gpg; do echo "${file} : " && git log -- ${file} | sed -n 9p; done; popd

这将打印出已添加到KEYNAME的协作者列表。如果git-crypt能显示成功/失败消息,我就能更快地解决这个问题。但是一旦我弄清楚了如何查看哪个用户被添加到哪个密钥中,我终于开始理解git-crypt的工作原理,并且能够以正确的方式设置所有内容。

相关问题