2009-01-06 157 views

回答

177

如果您有訪問存儲庫本身(而不是一個工作副本),你應該能夠轉儲當前存儲庫,它進行過濾,只包括有關的文檔文件夾的信息,並將其加載到其他倉庫。

會是這樣的:

svnadmin dump /svn/old_repos > ./repository.dump 
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops <./repository.dump> ./docs_only.dump 
svnadmin load /svn/new_repos < ./docs_only.dump 

如果無法訪問存儲庫,就無法維持修訂歷史記錄,你不得不接受的文件複製到新的存儲庫和提交。

+1

不錯的例子。請注意,正如我鏈接到的文檔中所述,此解決方案將重新編號所有修訂,以便不存在「空容器」。如果您在其他地方參考了文檔修訂版,請記住一些事項。 – 2009-01-06 19:20:03

2

我不相信你可以遠程做到這一點(即沒有本地副本)。但是,這應該工作:svn export該文件夾從原始服務器,然後svn add它到您的新回購。

像:

$ svn checkout svn://example.net/newrepo . 
$ svn export svn://example.com/oldrepo/mydir ./mydir 
$ svn add ./mydir; svn commit 

編輯:D'哦,這個下降的歷史。使用svnadmin作爲Samuel describes

+3

這不會保留所有修訂版本,他需要保留這些修訂版本。 – 2009-01-06 19:13:27

+3

但是,如果不訪問存儲庫本身,則無法保留修訂版本。如果你只能有一個工作副本,這是他能做的最好的。 – Samuel 2009-01-06 19:15:41

5

這SVN文檔中所討論的。查看svndumpfilterRepository Maintenance部分...它具體描述瞭如何將項目從中央存儲庫中轉儲出來並將它們移動到新的獨立存儲庫中。

28

svndumpfilter存在一個嚴重的缺陷 - 如果一個文件或路徑從您要過濾的路徑中複製過來,svndumpfilter將無法填寫歷史記錄並且作業將失敗。

您可以使用svndumpfilter2如果您遇到此問題。

2

以供將來參考:

SVN文檔明確報道:

如果你打算通過手工編輯轉儲文件來刪除頂級目錄,請確保您的編輯器沒有設置爲自動轉換結束因爲內容將不符合元數據,因此將行符轉換爲本機格式(例如,\ r \ n到\ n)。這將使轉儲文件無用。

使用sed或Vim替代頂級目錄,但是這個目錄名也包含在項目文件內! 這會導致SVN加載校驗和錯誤。

所以,當你執行此操作,不做字符串替換使用sed僅路徑名。

替補「節點路徑:old_path」與「節點路徑:new_path」。有關更多詳細信息,請參閱SVN書第5章「存儲庫管理」。

1

我試圖使用接受的答案,但我有一個巨大的存儲庫,我想導出一個小目錄,我無法負擔轉儲整個存儲庫。

所以,我只導出修改我的目錄改變(這可能無法正常工作,如果你想要導出的目錄引用其他地方在你的回購)。

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt 
#tac for revisions in reverse (oldest revision first) 
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done 

#You don't have to filter if you commited only files in your directory docs in your exported revisions 
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops <./docs_revisions.dump> ./docs_only.dump 

svnadmin load /svn/new_repos < ./docs_only.dump 

您必須更換服務器的回購URL(URL_to_docs),位置(/svn/old_repo)和路徑文檔存儲庫(path/to/docs

您可以輕鬆編輯您的docs_only.dump,如果你想改變的位置您的新的存儲庫中的doc目錄。

相關問題