之前,我一直都是用的SVN作為我日常的版本控制工具,諸如代碼啊文檔啊之類的東西。至於CVS這麼復古的版本控制工具更是沒有機會去嘗試。說到SVN控制版本的話,作為託管服務商比較好的就有google code,本人也一直在使用。最近,由於一些項目的原因,了解到了另外一個版本控制工具Hg,當然Hg不是它的原名,原名叫Mercurial,都是水銀的意思,所以通常稱呼為Hg。
與集中式版本控制工具SVN不同的是,Hg是一種分散式版本控制工具。除了Hg,還有大名鼎鼎的Git也是分散式版本控制工具。想要更具體的了解版本控制工具的,推薦閱讀胡凱《為什麼我們要放棄Subversion》,
風雲《分 布式的版本控制工具》,猛禽《分 布式版本控制(一)》 《分 布式版本控制(二) 》,Sparkle《我 與Mercurial 系列等幾篇文章》等。只是想了解Mercurial(Hg)的話,Mercurial官方wiki已經有很詳盡的資料和幫助文檔了。
接下來回到本文的正題。本文的起因是Google Code在早前除了支持SVN託管代碼外,更支持了分散式版本控制Mercurial(Hg)來管理你託管在Google Code上的項目。至於Google為什麼在這麼多種的分散式版本控制工具中選擇了Mercurial而不是Git,這裡有一篇文章,推薦閱讀一下《Git 與 Mercurial 的分析》,原文《Analysis of Git and Mercurial》。
下面,就教大家怎麼讓Google Code用Mercurial替代Subversion來管理你的項目。原文 http://code.google.com/p/support/wiki/ConvertingSvnToHg。
在Google Code里設置由Mercurial來管理項目
- 訪問你已經存在的google code項目頁面,選擇 「Administer」 選項頁,然後選擇下級分類選項頁 「Source」。
- 改變第一項Repository type為Mercurial。
- 參照下文介紹的「如何轉換Google Code里Subversion的歷史記錄到Mercurial中」,導入你的代碼到 Hg 代碼庫中
- 以同樣的導入代碼的方式,導入你的wiki到Hg wiki庫中。確認你使用的subversion代碼庫的wiki路徑(例如 http://projectname.googlecode.com/svn/wiki) 以及 Hg 代碼庫的wiki路徑(http://wiki.projectname.googlecode.com/hg/)
在你切換你的項目使用Mercurial管理後,你的舊Subversion項目仍然可以訪問,所以在你切換之前你不需要備份你的代碼庫。你的Subversion版本庫將會保持訪問: https://projectname.googlecode.com/svn/
如何轉換Google Code里Subversion的歷史記錄到Mercurial中
第一種方式:簡要截取
如果你不在乎你原來項目的歷史記錄,那麼你可以簡單地從Subversion里的主幹代碼或者wiki中提取最新的代碼然後放到你的Mercurial中。假設你googlecode里的 Mercurial代碼庫是空的,那麼可以這樣操作:
$ hg clone https://projectname.googlecode.com/hg hg-client $ cd hg-client $ svn export --force http://projectname.googlecode.com/svn/trunk . $ hg add . $ hg commit -m "Initial import of source." $ hg push |
接著轉換你的wiki:
$ hg clone https://wiki.projectname.googlecode.com/hg hg-client-wiki $ cd hg-client-wiki $ svn export --force http://projectname.googlecode.com/svn/wiki . $ hg add . $ hg commit -m "Initial import of wiki." $ hg push |
第二種方式:完整歷史記錄轉換
如果你要遷移你整個的歷史記錄,整個過程可能要你更多的參與了。你將會需要先安裝一些特殊的工具程序。
安裝工具
- ‘hg convert’擴展模塊。最新版本的Mercurial已經包含這個模塊,請確保你的hg版本為1.1 或者 1.2 或者更高版本。 (可用”hg –version”命令查看) 然後在你的.hgrc裡面添加如下代碼啟用該擴展模塊:
[extensions] hgext.convert=
- Subversion的swig-python綁定。請確保您有最近的Subversion安裝(1.5或1.6)。絕大部分的Subversion衍生版本都有與python的綁定,或者提供他們額外的二進位包。你可以運行如下代碼檢查你的svn – python的綁定是否正常:
$ python -c "import svn.core; print svn.core.SVN_VER_MINOR" 5
如果失敗,或返回的版本低於5,則肯定是不對的。如果你沒有二進位軟體包,你可以從Subversion自己的源代碼樹中建立:
$ svn checkout http://svn.collab.net/repos/svn/tags/1.6.0 svn $ cd svn $ ./autogen.sh && ./configure $ make $ sudo make install $ make swig-py # make sure you have swig 1.3 installed already $ make check-swig-py $ sudo make install-swig-py
如果你在Ubuntu的Hardy版本,你可以在hardy-backports里找到1.5版的python-subversion: http://packages.ubuntu.com/hardy-backports/python-subversion
這可能還需要安裝backports里的libsvn1, subversion, mercurial-common, 和mercurial 包。
開始轉換
現在我們開始轉換– branches(分支), tags(標籤)以及其他全部:
$ mkdir hg-client $ hg convert http://projectname.googlecode.com/svn hg-client |
一旦完成轉換,你就可以push你最新的歷史記錄到你的Google Code項目中(前提是你有了一個空的Mercurial版本庫):
$ cd hg-client $ hg push https://projectname.googlecode.com/hg |
至此,大功告成。
➡ ➡ ➡ 不好意思 搶個沙花
@eddie 來得早不如來得巧么..
最近打算學習版本控制系統,謝謝你推薦的資料和教程 😈
公司的項目可不敢放google上做版本管理
我託管的很少,而且比較熟悉Subversion,hg就不折騰了
你們的博客都做的好漂亮呀! 😛
目前我是一個都冇有託管 = =
google code確實好用
Pingback: 轉換你的 Subversion 到 Git - Leeiio Chaos Made.
Pingback: 轉換你的 Subversion 到 Git - Leeiio Chaos Made.
SVN的機制還沒有用活,繼續停留在SVN上
前提是不是要有svn才能轉換的呀
@frank 沒有SVN的話就不需要轉了啊,新建的時候直接選擇Hg就可以了。
不懂。。。。 😮
😀 不錯,
Pingback: Wiki | xilige
Pingback: 轉換你的 Subversion 到 Git – 馬開東博客
Pingback: 轉換你的 Subversion 到 Git - IT牛人博客聚合