2009-11-01 154 views
2

我想將SVN版本庫轉換爲Mercurial,但我遇到了一些麻煩。這是我所採取的步驟:(我是在Windows上)將Subversion版本庫轉換爲Mercurial

原來的「轉換」,在擴展

打開命令窗口,鍵入:

hg convert http://myversioncontrorepositoryhere 

它說,它的初始化目標文件夾,然後問:

Enter username for Administration at http://myversioncontrorepositoryhere: 

型我的用戶名,然後

in Administration at http://myversioncontrorepositoryhere: 

我想這是我的密碼,但它只是返回到

Enter username for Administration at http://myversioncontrorepositoryhere: 

我在做什麼錯?我很確定我正確輸入了我的用戶名和密碼。

回答

7

我不知道什麼可能是想錯了,但我想提出一個解決方法(這是我個人用於此任務的唯一途徑!):第一svnsync svn的項目,使當地鏡像,然後hg convert那個本地鏡像 - 這就是奧沙利文在his book中建議的(這個URL作爲「本書的樣本」,完全是將其他VCSs項目導入到hg的相關附錄 - 特別強調了svn! ),儘管他的建議大多是受速度考慮的啓發,但我懷疑它也爲我節省了身份驗證和授權的麻煩,並且我希望它也能爲你做到這一點!)

+0

我試圖做一個svnsync,但我不斷收到此錯誤: svnsync:儲存庫尚未啓用接受修訂propchanges; 要求管理員創建pre-revprop-change鉤子 所以我啓用了pre-revprop-change鉤子,但它仍然發生。 – Paul

+0

取消 - 在那裏的鉤子不能在windows下工作,它需要包含「@exit 0」 – Paul

3

改爲嘗試hgsubversion;它更強大。我在Windows上與Subversion的CLI進行交互時遇到了很多奇怪的問題(主要通過使用CMD而不是另一個shell來解決)。

+0

hgsubversion顯然無法處理非ASCII文件名,決定不將它們解釋爲UTF-8,但拉丁文1.您是否知道任何方式? – Joey

+0

提交錯誤? :)嚴重的是,這都是Python,它應該能夠應付。 –

1

我有幸運行固定身份驗證問題通過簡單地從本地轉換而來結賬:

svn co http://myversioncontrorepositoryhere localrepo 
hg convert localrepo 
+0

好點!一個缺點是你錯過了'trunk /'+'branches /'+'標籤/'轉換.... – gavenkoa

0

以我的經驗轉換一個真正的Subversion版本庫與一堆項目和多年的歷史是多一點涉及。主要是因爲在Subversion中,對所有的東西都有一個巨大的回購是很好的。相反,Mercurial存儲庫被建議更加細化。

我認爲以下Subversion版本庫佈局:

├── project1 
│ ├── branches 
│ ├── tags 
│ └── trunk 
│  ├── package1 
│  └── package2 
└── project2 

轉換應該把package1package2與自己的歷史分開的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和克隆。