以我的經驗轉換一個真正的Subversion版本庫與一堆項目和多年的歷史是多一點涉及。主要是因爲在Subversion中,對所有的東西都有一個巨大的回購是很好的。相反,Mercurial存儲庫被建議更加細化。
我認爲以下Subversion版本庫佈局:
├── project1
│ ├── branches
│ ├── tags
│ └── trunk
│ ├── package1
│ └── package2
└── project2
轉換應該把package1
和package2
與自己的歷史分開的Mercurial庫。在這個答案中,我對單一路徑感興趣,但標籤和分支的轉換也是possible。
準備
我通常做轉換快速連接遠程服務器上。對於Debian系列,需要以下軟件包。
apt-get install mercurial subversion python-subversion
然後轉換擴展應該啓用。
echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc
在Windows上,確保您的符合the prerequisites。
執行
請注意,如果你想直接從遠程顛覆做一個轉換回購它可能會需要幾個小時,所以下面創建項目的路徑的鏡子。然後每次轉換都是幾分鐘到幾分鐘的事情。
cd /tmp
svnadmin create svn-mirror
# on Windows you may need to look at comments to accepted answer
echo '#!/bin/sh' > svn-mirror/hooks/pre-revprop-change
chmod +x svn-mirror/hooks/pre-revprop-change
svnsync init file:///tmp/svn-mirror svn://subversion.repo/project1
svnsync sync file:///tmp/svn-mirror
echo 'include project1/trunk/package1' > package1-map
echo 'rename project1/trunk/package1 .' >> package1-map
hg convert --filemap=package1-map svn-mirror package1
echo 'include project1/trunk/package2' > package2-map
echo 'rename project1/trunk/package2 .' >> package2-map
hg convert --filemap=package2-map svn-mirror package2
然後包的目錄,你可以用一個善變的客戶或回購經理像RhodeCode從http://your.host:8080
運行hg serve -p 8080
和克隆。
我試圖做一個svnsync,但我不斷收到此錯誤: svnsync:儲存庫尚未啓用接受修訂propchanges; 要求管理員創建pre-revprop-change鉤子 所以我啓用了pre-revprop-change鉤子,但它仍然發生。 – Paul
取消 - 在那裏的鉤子不能在windows下工作,它需要包含「@exit 0」 – Paul