我有一個網站,用戶可以通過它編寫自己的劇本。如何從Apache服務器上的Apache SVN存檔舊版本
本屏幕截圖以修訂版的形式保存。
Apache SVN已安裝。
我想只保存每個用戶文檔的最後5個修訂版。
但問題出在後端,所有修訂都存儲在一個名爲「Docsrepo」的文件夾中,並且它在1個文件夾中被歸類爲1000個修訂版。像這樣它有234個文件夾。
含義234 * 1000修訂版。
現在我想歸檔所有這個修訂版,只保留每個文檔的最後5個版本。
我該怎麼做?
我有一個網站,用戶可以通過它編寫自己的劇本。如何從Apache服務器上的Apache SVN存檔舊版本
本屏幕截圖以修訂版的形式保存。
Apache SVN已安裝。
我想只保存每個用戶文檔的最後5個修訂版。
但問題出在後端,所有修訂都存儲在一個名爲「Docsrepo」的文件夾中,並且它在1個文件夾中被歸類爲1000個修訂版。像這樣它有234個文件夾。
含義234 * 1000修訂版。
現在我想歸檔所有這個修訂版,只保留每個文檔的最後5個版本。
我該怎麼做?
向SVN添加一個鉤子是可能的,這樣當用戶檢入一個新的修訂版本時,可以拋棄最舊的修訂版本。但是,您確實意識到SVN沒有保留每個腳本的1000 * 234完整副本嗎? SVN只保存每個版本之間的差異。
如果您查看文件夾,您會看到每個修訂版都存儲爲一個單獨的文件,因此您可以看到這些尺寸。這些文件中的每一個都真的存儲了簽入之間的差異或差異,所以它們應該非常小。
對於更高版本的SVN,您可以運行'svnadmin pack'命令,該命令將1個文件夾中的所有文件合併爲一個更大的文件。這有助於提高性能,因爲操作系統可以更好地緩存單個文件,但是,它只適用於已滿的較舊文件夾 - 即不會添加到其中的文件夾。儘管運行起來很安全,並且可以隨時隨地運行(有些人在每次簽入時都會運行它,有些人每週或每月運行一次)。
現在,您不能只刪除舊文件,因爲您已經看到每個文件僅包含它與之前版本之間的差異,所以如果您刪除了舊文件,SVN將無法重新生成舊文件,根據所有隨時間的變化創建總文件。
這有一個輕微的複雜性。 SVN使用名爲skip-deltas的東西,它們是「檢查點」,它存儲了以前所有差異的彙總,這意味着您可以獲得更好的性能。但是,這仍然不意味着你可以刪除舊文件,除非你知道你可以重新創建每個文件(我猜你不會知道每個文件有多少實際的檢查)。
所以..去回答你的問題:
你可以轉儲並加載你的資料庫,忽略古老的文件。這涉及到svnadmin轉儲和svnadmin加載命令。 You dump the repo into a dumpfile只使用最後5個版本號,然後將轉儲文件加載到新的回購庫中。 (我認爲也有基於日期的傾銷選擇)。
請注意,不能保留每個文件的最後5個修訂版。您只能轉儲一系列修訂。
顯然這是一個手動管理任務,通常用於刪除古代修訂版,沒有人會再次看到。沒有自動'只保留最後5修訂'選項。 但是,刪除修訂的需求很小,SVN非常擅長保持性能,而且增量很小,所以不需要刪除歷史記錄。如果你真的缺少磁盤空間,那麼轉儲/加載選項是你最好的選擇。
SVN不存儲每個修訂版的完整副本,它只存儲差異。所以我不確定你在描述什麼。 – 2012-04-07 17:33:13
另外,您看到的'1000'不是該文件夾中修訂版的實際數量。 SVN在文件系統中「修改」了修訂版,這是SVN很容易知道的,當它必須處理版本號687時,它應該在'1000'文件夾中查找;修訂號3465,它應該在'3000'文件夾中查找;等等。 – 2012-04-08 03:19:02