2011-03-14 130 views
6

下面的资源描述了如何从git存储库中删除敏感数据。如何验证从git存储库中删除敏感数据?

后来,我怎么仔细检查顽皮位真的走了,,搜索所有斑点在仓库中(无论是引用,垃圾,包装,松散或其他方式)来验证犯罪模式已被彻底销毁?

当使用裸仓库与使用工作树的仓库相比时,答案会改变吗?

回答

9

根据这一GitHub的页面,任何承诺可以通过SHA1引用,即使没有裁判指向它,所以你必须删除存储库并重新创建它。我可以验证一个提交在被解除引用至少两周后仍然可见。一般来说,一旦你删除了敏感数据 - 这样它们就不能通过任何ref访问 - 修剪Git的对象存储的最简单方法是克隆仓库并销毁旧仓库。如果您没有直接访问存储库(如GitHub),则尤其如此。

(换句话说:如果垃圾SHA1是已知的,那么GitHub上会很乐意为它服务在网上Git协议,通常会拒绝给您无名提交,但它可以与daemon.uploadarch配置启用)

将被引用对象变成垃圾对象的方式是司法应用rebase,filter-branch,reflog,update-ref等。清除垃圾对象的方式是司法适用gc,fsck,prunerepack

实施例的查询:

  • 列表悬空提交,这可能会用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等命令可能需要某些用例的工作树。

+0

我通过'fast-export',hack,'fast-import'建立了一个新的repo和'rm -rf'旧的构造来消除违规位。 – 2012-02-25 02:38:34