2010-03-28 77 views

回答

6

答案是在Subversion FAQ

有一些特殊情況下,您可能 要破壞的 所有證據文件或提交。 (也許有人 不小心犯了一個機密 文件)。這並不是那麼容易,因爲 Subversion被故意設計成 永不丟失信息。修訂版本是 不可變的樹,它建立在另一個 上。從 歷史中刪除修訂將導致多米諾骨牌效應, 在所有後續 版本中創建混亂並可能使所有工作副本無效 。

該項目的計劃,然而,有一天 實施svnadmin的 泯命令這將 來進行永久刪除 信息的任務。 (參見問題516)

在此期間,你唯一的辦法是 到svnadmin的轉儲你的資料庫,然後 管轉儲文件通過 過濾流(不包括壞路徑) 到svnadmin的負載命令。有關詳細信息,請參閱 Subversion書的第5章 。

+0

感謝那,這裏是一個很好的文章:http://blog.projectnibble.org/2008/03/01/subversion-obliterate-the-forgotten-feature/乾杯 – Marcin 2010-03-28 10:50:16

0

rm -rf在倉庫平時工作正常。

+0

那麼內部svn數據庫呢? – Marcin 2010-03-28 10:18:03

+0

我一直生活在svn將數據庫保存在服務器存儲庫某處的印象中,因此核心存儲庫也會擺脫它。但我可能是錯的。 – che 2010-03-28 21:26:01

1

不,我不相信。

如果你確實需要從SVN歷史記錄中完全刪除文件,我認爲唯一的方法是做類似於傾銷存儲庫,用svndumpfilter過濾出你不想要的文件,然後重新創建來自轉儲的存儲庫。

你爲什麼要這樣做?

+0

我有一個項目,我想徹底從我的回購中刪除。 – Marcin 2010-03-28 10:27:35

0

這是如何做到這一點在Linux上:

/>svnadmin dump /path/to/repos > proj.dump 
/>cat proj.dump | svndumpfilter exclude somefolder > cleanproj.dump 
/>service svn stop 
/>BACKUP /path/to/repos/conf /path/to/repos/hooks (all custom configuration for this repository) 
/>DELETE /path/to/repos 
/>svnadmin create /path/to/repos 
/>RESTORE /path/to/repos/conf /path/to/repos/hooks 
/>svnadmin load /path/to/repos < cleanproj.dump 
/>service svn start 

0

我假設你在同一個倉庫下談論多個項目:

myrepo/ 
     project1/ 
     project2/ 

如果你只是想讓一個項目在不與存儲庫歷史結合的情況下「消失」,那麼如果你使用的是一個認證,你可以簡單地隱藏這條路徑利用authz的授權機制。換句話說,你是而不是使用'svn + ssh'來訪問版本庫。

假設我的authz中已經有一個名爲'everyone'的組。在我的authz我會設置像這樣:

[/project1]: 
    @everyone = 
+0

我想刪除它不隱藏, 謝謝。 – Marcin 2010-03-30 10:44:05