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