4

我使用git-crypt分叉了一个 repo ,我需要更新 git-crypt 密钥,以便上游 git-crypt 密钥无法解密新的 repo。

git-crypt help文档和自述文件似乎没有解释如何更改 git-crypt 密钥。

我尝试了各种擦除 git-crypt 配置并重新初始化的方法。不幸的是,所有这样做的尝试似乎都破坏了各种事情,比如 git diff 显示错误,如smudge filter git-crypt failed. 在已初始化的存储库上运行git-crypt init会导致数据不可读中记录了其中一些行为。https://github.com/AGWA/git-crypt/issues/47评论中的任何建议都不能防止 git diff 致命错误。(我对 git diff 显示来自未加密二进制文件历史记录的无用输出很好,但某些git diff提交中给出致命错误以防止对未加密文件进行比较是不合适的。)

这似乎是 git-crypt 的主要要求,所以我不敢相信这不受支持,例如,如果您因为有人离开公司而需要轮换 git-crypt 密钥。

4

2 回答 2

6

通过一些工作,您可以旋转中央键(不是 gpg,我不知道)

  1. 删除 .gitattributes 文件。这将解密您的秘密。
  2. 存储更改(以在本地存储未加密的秘密)
  3. 删除 .gitattributes 和所有机密文件。犯罪。(操作 2+3 是为了您不必提交任何明文秘密)
  4. 做'git-crypt lock',在这种情况下只是扔掉你的钥匙
  5. 执行“git-crypt init”来创建一个新密钥。
  6. 取消隐藏隐藏的文件并重新创建 .gitattributes
  7. 犯罪

请注意,协作者需要在拉取新更改之前执行“git-crypt lock”,以便丢弃旧密钥并在纯 git 模式下仅使用文本文件(尽管机密仍然是加密的)。

更新后,只需使用新密钥 git-crypt unlock。

于 2019-05-15T14:41:50.923 回答
3

正如https://github.com/AGWA/git-crypt/issues/61中明确指出的那样,git-crypt 不支持旋转 git-crypt 密钥。


我最终重写了 git 历史记录以删除旧 git-crypt 密钥的所有先前历史记录(我从 git 历史记录中完全删除了加密文件),然后创建了一个新密钥并签入了加密文件。这既费时又痛苦。

此限制记录在https://github.com/AGWA/git-crypt/#limitations。如果您需要轮换密钥,您可能需要考虑不使用 git-crypt。

于 2017-11-28T20:26:43.240 回答