如何更改 git-crypt 密钥
How to change git-crypt key
我使用 git-crypt 分叉了一个存储库,我需要更新 git-crypt 密钥,以便上游 git-crypt 密钥无法解密新的存储库。
git-crypt help
文档和 README 似乎没有解释如何更改 git-crypt 密钥。
我尝试了多种擦除 git-crypt 配置并重新初始化的方法。不幸的是,所有这样做的尝试似乎都会破坏各种东西,比如 git diff 显示 smudge filter git-crypt failed
之类的错误。 Running git-crypt init
on an already initialized repository renders the data unreadable. None of the suggestions in the comments at https://github.com/AGWA/git-crypt/issues/47 中记录了其中一些行为,以防止 git diff 致命错误。 (我对 git diff 显示未加密二进制文件历史记录的无用输出很好,但是 not 可以 git diff
在某些提交中给出致命错误以防止 diffing甚至是未加密的文件。)
这似乎是 git-crypt 的主要要求,所以我不敢相信这不受支持,例如如果因为有人离开公司而需要轮换 git-crypt 密钥。
如 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。
通过一些工作,您可以旋转中央密钥(不是 gpg,我不知道)
- 删除 .git 属性文件。这将解密您的秘密。
- 存储更改(在本地存储未加密的秘密)
- 删除 .git 属性和所有机密文件。犯罪。 (操作 2+3 是这样,因为您不必提交任何明文秘密)
- 做 'git-crypt lock' 在这种情况下只是扔掉你的钥匙
- 执行 'git-crypt init' 创建新密钥。
- 取消隐藏的文件并重新创建。git属性
- 提交
请注意,协作者需要在提取新更改之前执行 'git-crypt lock',以便丢弃旧密钥并以普通 git 模式仅使用文本文件(尽管机密仍然被加密) ).
更新后,只需git-crypt用新钥匙解锁。
我使用 git-crypt 分叉了一个存储库,我需要更新 git-crypt 密钥,以便上游 git-crypt 密钥无法解密新的存储库。
git-crypt help
文档和 README 似乎没有解释如何更改 git-crypt 密钥。
我尝试了多种擦除 git-crypt 配置并重新初始化的方法。不幸的是,所有这样做的尝试似乎都会破坏各种东西,比如 git diff 显示 smudge filter git-crypt failed
之类的错误。 Running git-crypt init
on an already initialized repository renders the data unreadable. None of the suggestions in the comments at https://github.com/AGWA/git-crypt/issues/47 中记录了其中一些行为,以防止 git diff 致命错误。 (我对 git diff 显示未加密二进制文件历史记录的无用输出很好,但是 not 可以 git diff
在某些提交中给出致命错误以防止 diffing甚至是未加密的文件。)
这似乎是 git-crypt 的主要要求,所以我不敢相信这不受支持,例如如果因为有人离开公司而需要轮换 git-crypt 密钥。
如 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。
通过一些工作,您可以旋转中央密钥(不是 gpg,我不知道)
- 删除 .git 属性文件。这将解密您的秘密。
- 存储更改(在本地存储未加密的秘密)
- 删除 .git 属性和所有机密文件。犯罪。 (操作 2+3 是这样,因为您不必提交任何明文秘密)
- 做 'git-crypt lock' 在这种情况下只是扔掉你的钥匙
- 执行 'git-crypt init' 创建新密钥。
- 取消隐藏的文件并重新创建。git属性
- 提交
请注意,协作者需要在提取新更改之前执行 'git-crypt lock',以便丢弃旧密钥并以普通 git 模式仅使用文本文件(尽管机密仍然被加密) ).
更新后,只需git-crypt用新钥匙解锁。