2010-01-07 103 views
4

嗨我想通過指定最大大小來限制我的存儲庫的大小,但是我找不到這樣做的任何信息。這在技術上可行嗎?Subversion版本庫的限制大小

編輯:對不起,如果我不清楚。我想保留一個可以繼續提交補丁的功能存儲庫,但是至少有一個較新版本的文檔的最早版本可以自動刪除以保留在sizelimit中。所以說我可以回去修改約67個,因爲舊的已經被刪除(最好保留提交消息)。

+0

您是否試過查找「配額」? –

+0

超過尺寸限制時你想要發生什麼?該存儲庫將永久保留爲只讀狀態? – fennec

+0

有趣。我建議你看一下服務器上的一些提交鉤子。儘管如此,您還是需要做一些手動的工作(即自己計算大小,並拒絕提交)。 –

回答

13

這樣做是對你的倉庫的大手術。確保在真正存儲庫中完成此操作之前,您完全瞭解自己正在執行的操作。

您將無法做你的個人文件後,在做什麼,但你可以在整個存儲庫這樣做。你需要做的是切斷存儲庫的歷史尾巴。

這意味着,如果你有在你的倉庫5000次修訂版,你切斷最早的1000個版本,你會只用最新的4000個版本的存儲庫中結束。

這樣做需要轉儲/恢復週期,這意味着你必須禁用對倉庫的寫權限,而你的工作和重建信息庫。

你不會失去瀏覽倉庫時仍然可見的任何文件,但對於任何特定的文件歷史記錄可完全喪失(如果所有的修改,它是在第一個1000次修訂)。很顯然,如果某個文件在早期版本中被刪除,那麼剪切後就無法將其恢復。

另請注意,這樣做的簡單方法將重新編號從0開始的所有修訂版,因此在上面的示例中,修訂版5000將在截斷後變爲修訂版4000。如果這會導致你的問題,你將不得不做額外的工作。

因此,假設我們想減掉最早1000次修訂版,基本的工作流程是:

  1. 把你的資料庫離線(或者至少使其只讀)
  2. 運行svnadmin dump [repository path] -r 1000:HEAD > repository.dump。這將創建一個轉儲文件,其中只包含從1000年開始的修訂。通過而不是使用--incremental標誌,轉儲文件中的第一個修訂版將包含存儲庫的完整轉儲,因爲它查看版本1000(不包括所有歷史記錄)。
  3. 使用svnadmin create創建一個乾淨的存儲庫,並將舊的存儲庫中的複製鉤子目錄。
  4. 運行svnadmin load [new repository path] < repository.dump加載最近的修訂版本。
  5. 將舊版本庫移出(保留以備備份),並將新版本庫移至其位置。

如果要保留版本號,您必須從某處加載空白版本。您可以通過將修訂版1:999轉儲到單獨的轉儲文件中,然後使用svn dumpfilter從中刪除所有內容,然後加載空白修訂版,然後加載所需的修訂版。這有點費勁,但會讓你到那裏。 ( - >驅動器 - >屬性 - > ...我的電腦)

  • 設置配額限制到你需要的大小(前

  • +0

    謝謝你在答案中的驚人努力。 – svandragt

    1

    在預提交鉤子中,如果存儲庫超出限制,可以「中止」事務。

    +0

    我喜歡處理所有新的交易,但刪除了舊版本,而不會丟失任何當前版本的文件。 – svandragt

    +0

    @Pacifika:你需要一個守護進程/ cron作業來在服務器端執行這種操作。儘管你可以通過「提交鉤子」來「關閉/觸發」這個過程。 – jldupont

    +0

    ...爲什麼沒有評論的投票? – jldupont

    1

    有沒有簡單的方法來做到這一點。你真的需要重建存儲庫刪除最舊的修訂版本。沒有一個SVN命令可以做到這一點。你所需要的過程大致是:

    1. 做一個svnadmin的轉儲(只能在主機上進行)。
    2. 使用過濾流過濾掉不需要的修訂。
    3. 創建一個新的存儲庫,並使用svnadmin的負載加載到新的存儲庫。

    這個link會給你一些關於svndumpfilter的信息,這是整個操作的關鍵部分。

    反思:過濾流給控制哪些文件/路徑包含或排除的,但我不能確定它給出了修訂的細粒度控制...

    0

    你不能做到這一點。 相反CVS,subevrsion不保留每修改整個源 但只有即將到來的版本之間的差異(也有點聰明但是對於這個問題並不重要)

    +1

    我不認爲CVS維護整個資源(只有差異)。 – Tarydon

    1

    由於SVN所有版本都基於的diff之前發生的事情,沒有辦法「清理」舊版本。如果您出於某種原因確實需要這樣做,那麼您必須每隔一段時間都要進行導出並將其重新導入到新的存儲庫中。

    0
    1. 爲SVN
    2. 啓用所有的NTFS驅動器配額管理創建Windows用戶帳戶,20 Mb)
    3. 配置SVN服務器在您剛剛創建的帳戶下運行
    4. 享受!