對svn版本庫磁碟空間瘦身

來源:互聯網
上載者:User

標籤:svn

問題原因:

平常自己寫的測試專案都放在自己電腦上的一個svn版本庫裡,有些資料放進去後來又刪掉了,但是svn版本庫是不會減少的,

如果放進去了一個200M的項目,版本曆史是 50, 這時候可去看下svn庫,下的 db/revs/0/50 這個檔案,將永久存在這個svn庫中,

如果這個項目將來想還原出來,這個功能倒是有用,如果是永久放棄,就需要 對svn庫進行下瘦身了

一. 匯出整個版本庫

svnadmin dump F:/SVN/test  > F:/SVN/dump

我的版本庫跟路徑是F:/SVN/test , 

這樣整個test庫匯出到 F:/SVN檔案夾下的dump檔案


(或者匯出時就給版本庫瘦下身,使用-r參數指定版本記錄從60到99 進行匯出 

svnadmin dump F:/SVN/test -r 60:99  > F:/SVN/dump)


二.過濾dump檔案 

svndumpfilter include /trunk/project1 <dump> dump_project1  --drop-all-empty-revs

這個命令時過濾dump檔案中/trunk/project1檔案下的所有檔案到dump_project1檔案中,


svndumpfilter exclude /trunk/project1 <dump> dump_project1  --drop-all-empty-revs

這個命令時過濾dump檔案中/trunk/project1檔案下的所有檔案 除去,剩餘的檔案資訊放到dump_project1  檔案中


如果有多重專案,可以直接在 /trunk/project1後加個空格,接著寫項目路徑.eg: /trunk/project1  /trunk/project2

下面是過濾時能用的所有參數:

--drop-empty-revs        : Remove revisions emptied by filtering.
  --drop-all-empty-revs    : Remove all empty revisions found in dumpstreamexcept revision 0.
  --renumber-revs          : Renumber revisions left after filtering.
  --skip-missing-merge-sources : Skip missing merge sources.
  --targets ARG            : Read additional prefixes, one per line, fromfile ARG.
  --preserve-revprops      : Don‘t filter revision properties.
  --quiet                  : Do not display filtering statistics.
  --pattern                : Treat the path prefixes as file glob patterns.

一般就使用--drop-all-empty-revs 把原來的編號給刪掉,從新排列. 把過濾掉的檔案的曆史資訊給扔掉

--renumber-revs這個是曆史資訊扔掉,但不重新排列序號

--preserve-revprops這個是保留所有的老版本資訊,包含過濾掉檔案資訊

三.建立svn庫並匯入過濾號的資料

 

svnadmin create test2
svn mkdir file:///F:/svn/test2/trunk --parents  -F F:/svn/log.txt  (這是在建立的svn庫中添加一個trunk目錄,否則下一步會報錯,所有的過濾目錄的上級目錄都要自己手動建好)
svnadmin load F:/svn/test2 < dump_project1



完整的一個批次檔: 

svnadmin dump F:/SVN/test  > F:/SVN/dump

svndumpfilter include /trunk/project1 <dump> dump_project1  --drop-all-empty-revs

if exist test2 (
rd /s/q test2 
svnadmin create test2 
svn mkdir file:///F:/svn/testTemp/test2/trunk/ --parents -F F:/svn/log.txt
)  else  (
svnadmin create test
svn mkdir file:///F:/svn/testTemp/test2/trunk/ --parents -F F:/svn/log.txt

svnadmin load F:/svn/testTemp/test2  < dump_project1



一個謹慎的操作:

如果過濾一個這樣的 /trunk/first/second/third/project1項目,然後把project1移動到/trunk下.

結果:

/trunk/project1

這種操作往後將不能再對project1下的檔案瘦身,排除一些檔案了,這個時候project1下的檔案指向路徑還是/trunk/first/second/third/project1項目老的物理磁碟檔案.svn上的路徑換了,而磁碟檔案沒變,而老的svn路徑/trunk/first/second/third/project1將變為一個invalid path

當再次對這種庫匯出檔案過濾的時候會報錯.eg:過濾 /trunk/project1/docs

svndumpfilter include /trunk/project1/docs <dump> dump_project1_docs  --drop-all-empty-revs

當把docs下檔案過濾到 dump_project1_docs  時,還是用的/trunk/first/second/third/project1這個路徑copy過去.
然後報出/trunk/first/second/third/project1 路徑 無效.



所以所以 瘦個身,就瘦個磁碟空間就可以了,不要把路徑也給瘦了.路徑一瘦往後別想再瘦磁碟空間了



 

http://svnbook.red-bean.com/en/1.7/svn.ref.svndumpfilter.html#svn.ref.svndumpfilter

對svn版本庫磁碟空間瘦身

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.