對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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章