The*_*ude 7 encryption version-control git privacy cloud
最近我切换到 GIT 并选择了 bitbucket 来托管我的代码。
现在有了所有斯诺登丑闻,我决定重新审视我的选择。
我真的不想在我自己的服务器上托管我的数据,我宁愿继续使用 bitbucket。
我对 bitbucket 本身只有好话,但我只想确保我的私人数据(源代码)保持这种状态。
我知道很多人将 TruCrypt 与 DropBox 一起使用,我想知道这对 bitbucket 是否可行(即强制 git 在发送到 bitbucket 之前透明地自动加密源代码和文件),如果有人可以分享如何做到这一点?我用谷歌搜索了很多,但找不到正确的方法来做到这一点。
Rol*_*ith 11
一种解决方案可能是使用 git'ssmudge和clean filters。不过,这个解决方案有一些严重的缺点,我们稍后会谈到。
您需要编写两个充当过滤器的脚本,即从标准输入读取并写入到标准输出。从文档:
过滤器驱动程序由一个 clean 命令和一个 smudge 命令组成,这两个命令都可以不指定。签出时,当指定了 smudge 命令时,该命令会从其标准输入中获取 blob 对象,并使用其标准输出来更新工作树文件。同样,clean 命令用于在签入时转换工作树文件的内容。
例如,当使用 openssl 时,我们可以编写文件fooenc.sh:
#!/bin/sh
openssl enc -bf -nopad -pass pass:1KjeHD8d6YUI80bIIEAQ9iYr@njqLw3T
Run Code Online (Sandbox Code Playgroud)
和foodec.sh:
#!/bin/sh
openssl enc -bf -nopad -d -pass pass:1KjeHD8d6YUI80bIIEAQ9iYr@njqLw3T
Run Code Online (Sandbox Code Playgroud)
请注意,这些脚本应保存在存储库之外,并且应保密,因为它们包含密钥!否则它们会很方便,因为它们不会在每次被调用时都要求输入密码。
一种更安全的替代方法可能是使用 GPG。
在.git/config存储库中的文件中,您应该指定这些过滤器;
[filter "crypt"]
clean = fooenc.sh
smudge = foodec.sh
Run Code Online (Sandbox Code Playgroud)
这不是笔误!请参阅上面的文档摘录。此设置在签入时加密数据,并在签出时解密。
然后在存储库的.git/info/attributes文件中,指定对所有文件使用此过滤器;
* filter=crypt
Run Code Online (Sandbox Code Playgroud)
只要过滤脚本可用,工作目录就会包含可读文件。但是 git 对象将被加密。
请注意,这排除了在没有必要脚本的任何机器上实际使用这些文件的可能性。所以 bitbucket 只能用作存储。
现在是不利的一面;这个解决方案也使工具git diff和一切依赖于它的东西变得无用,因为 git 的对象现在是加密的 blob。
编辑: 有像git-crypt或git-encrypt这样的实用程序可以帮助您加密存储库的内容。
并且有一个解决diff问题的方法;对差异使用特殊过滤器;使用带有附加脚本的textconv来解密 blob,然后再对它们进行比较。
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |