2011-03-14 132 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