2009-08-18 83 views
8

我的代碼以前的版本之一,存儲在一個Subversion版本庫中,有敏感信息。如何在保留所有其他版本的同時擦除它?如何從Subversion中清除敏感信息?

編輯:庫是谷歌代碼項目託管,所以我不能傾倒和恢復所需的庫=(

+1

我不認爲你可以自己做任何事情。你可以要求Google銷燬存儲庫,然後重建它嗎? – 2009-08-18 18:43:14

+0

也許我可以做到,如果我爲項目選擇一個新名稱。 – 2009-08-18 19:36:19

回答

7

要的是一個SVN的功能通常被稱爲「抹殺」,不幸的是仍然不。實施

作爲一種變通方法,你將不得不拋售,過濾&重新導入你的資料庫見例如,在SVN常見問題How do I completely remove a file from the repository's history?

的BTW條目:。這是一個欺騙:-)。 https://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

編輯:

該信息庫谷歌代碼項目託管,所以我不能轉儲和 恢復庫=(

據我所看到的,在這種情況下唯一的解決方案是(要求Google)重置您的存儲庫(請參閱this FAQblog post)。這將完全刪除存儲庫中的所有數據(包括當前數據和歷史記錄),就好像您剛剛使用svnadmin create啓動了存儲庫一樣。

顯然,您需要先備份您的存儲庫。

最好的解決辦法可能是:

  • 上創建使用snvsync你的回購的備份(這也將備份歷史)
  • 做轉儲/過濾/恢復舞蹈(見上)你回購的備份,刪除有問題的commmits
  • 重置谷歌庫
  • 放回你的過濾回購,再次使用snvsync(參見常見問題解答How do I import my existing source code?
7

除了完全轉儲之外,您無法刪除提交給subversion的內容,擦除原始內容並從轉儲中重新創建存儲庫。

如果你想徹底刪除一個文件/路徑,你可以做到這一點的過濾流:

svnadmin dump /path/to/repository > svndump 
svndumpfilter exclude path/to/sensitivefile > svndump-excluded 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository < svndump-excluded 

然後備份你的/路徑/到/存儲庫,並與後你的/ tmp/newrepository」替換已經證實一切正常。

如果您只想排除一個版本,你必須這樣做

svnadmin dump -r 0:1000 /path/to/repository > svndump1 
svnadmin dump -r 1002:HEAD --incremental /path/to/repository > svndump2 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository <svndump1 
svnadmin load /tmp/newrepository <svndump2 

也就是說,修訂1001被排除在外。你不能做更細粒度的順便說一句,整個修訂必須排除在外。同樣的交易在這裏,備份您的原始存儲庫,驗證新存儲庫中所需的一切都在那裏。