2011-12-27 61 views
0

我最近將信息提交給一個文件。只有幾行高度機密的代碼。我需要徹底地從Subversion版本庫中刪除這些信息。我怎麼能做到這一點,而不會恢復和失去變化?它只在一個文件中?那麼,是否可以刪除對該文件的所有引用,然後重新提交正確的文件?從Subversion提交中刪除數據?

+0

root密碼,是吧?你是否控制倉庫? – 2011-12-27 17:09:55

+0

[SVN Obliterate!]的可能重複(http://stackoverflow.com/questions/560684/svn-obliterate) – 2011-12-27 17:13:41

+0

Yip,root密碼。 *嘆息* – coderama 2011-12-27 17:19:36

回答

1

我認爲你必須

  • 記錄不好的承諾和以後每犯一個或幾個補丁
  • 轉儲庫
  • 建立新倉庫
  • 進口的所有修訂在轉儲到存儲庫的錯誤提交之前
  • 依次重新應用每個補丁(並在提交之前刪除幾行祕密信息)
+0

這是唯一的解決方案。 – khmarbaise 2011-12-27 17:36:43

1

SVN提供一個名爲svndumpfilter的命令,允許您轉儲存儲庫並從中排除路徑。然後,將該轉儲文件加載到一個新的存儲庫中,該文件將會消失。

http://www.principia-it.co.uk/tools-n-tips/subversion/subversion-faq/7-subversion/10-how-do-i-permanently-remove-paths-from-my-repository

svnadmin dump /path/to/repos > dump.file 
svndumpfilter exclude path/to/remove <dump.file> newdump.file 
svnadmin load /path/to/newrepos < newdump.file 
0

唯一的解決辦法是過濾在服務器端存儲庫。你應該使用像這樣的命令:

svnadmin create /path/to/newrepos 

svnadmin dump /path/to/repos --incremental | svndumpfilter excdlude path/to/remove | svnadmin load /path/to/newrepos 
0

你能等到Subversion 1.8出來嗎?那就是當高度要求的消除命令被執行時(當然,除非他們已經決定將它移到Subversion 1.9或2.0)。

不是吧?

您唯一能做的就是取下您的存儲庫,執行svnadmin dump,使用svndumpfilter對其進行過濾以刪除更改,然後使用svnadmin load重新加載存儲庫。這可以在單個管道中完成,但取決於您的存儲庫大小,可能意味着停機幾個小時。

我已經做了好幾次了。這並沒有什麼樂趣,特別是當你必須在凌晨2點這麼做的時候,因爲當你的開發人員忙於使用它的時候你無法取下你的存儲庫。

+0

值得注意的是,消除仍然不在1.8.11,以防萬一有人在這裏結束並激動。 :) – dannysauer 2015-03-24 19:10:23