下面的资源描述了如何从git存储库中删除敏感数据。如何验证从git存储库中删除敏感数据?
后来,我怎么仔细检查顽皮位真的走了,即,搜索所有斑点在仓库中(无论是引用,垃圾,包装,松散或其他方式)来验证犯罪模式已被彻底销毁?
当使用裸仓库与使用工作树的仓库相比时,答案会改变吗?
下面的资源描述了如何从git存储库中删除敏感数据。如何验证从git存储库中删除敏感数据?
后来,我怎么仔细检查顽皮位真的走了,即,搜索所有斑点在仓库中(无论是引用,垃圾,包装,松散或其他方式)来验证犯罪模式已被彻底销毁?
当使用裸仓库与使用工作树的仓库相比时,答案会改变吗?
根据这一GitHub的页面,任何承诺可以通过SHA1引用,即使没有裁判指向它,所以你必须删除存储库并重新创建它。我可以验证一个提交在被解除引用至少两周后仍然可见。一般来说,一旦你删除了敏感数据 - 这样它们就不能通过任何ref访问 - 修剪Git的对象存储的最简单方法是克隆仓库并销毁旧仓库。如果您没有直接访问存储库(如GitHub),则尤其如此。
(换句话说:如果垃圾SHA1是已知的,那么GitHub上会很乐意为它服务在网上Git协议,通常会拒绝给您无名提交,但它可以与daemon.uploadarch
配置启用)
将被引用对象变成垃圾对象的方式是司法应用rebase
,filter-branch
,reflog
,update-ref
等。清除垃圾对象的方式是司法适用gc
,fsck
,prune
和repack
。
实施例的查询:
列表悬空提交,这可能会用grep对于可能被垃圾收集敏感数据:
git fsck --no-reflogs | awk '/dangling commit/{print $3}' | while read sha1;
do git grep foo $sha1; done
列表的每一个对象从参考到达(添加--walk-reflogs
代替reflog):
git rev-list --objects --all | while read sha path;
do git show $sha | grep baz; done
另一种方法是使用fast-export
到整个存储库导出到一个基于文本的文件,你可以选择通过和你想要的任何工具,那么fast-import
到一个新的回购操作。这很好,因为它没有任何垃圾,并且可以非常容易地擦写整个存档。
如果您没有工作树,则答案不会更改,但filter-branch
等命令可能需要某些用例的工作树。
不是'git log'只能搜索可到达的对象吗?我想搜索*一切*。 – 2011-03-14 18:36:58
这是一个很好的观点,查看jleedev的答案 – ctcherry 2011-03-14 18:45:19
我通过'fast-export',hack,'fast-import'建立了一个新的repo和'rm -rf'旧的构造来消除违规位。 – 2012-02-25 02:38:34