同步你的 Mercurial(Hg) 和 Git 版本庫

同步你的 Mercurial(Hg) 和 Git 版本庫
我的Vim的配置文件之前都是託管在Bitbucket的,因為公司用的也是Hg,所以相對對於Hg使用更熟練一點。雖然Hg和Git都是分散式版本管理工具,但是Hg在使用上以及學習上確實簡單不少,很容易上手了。但是還是有很多人是喜歡用Git的,所以我必須要把我的Vim的配置同時用Git來進行版本管理,然後push到著名的Github網站,這樣Git使用者也可以很方便的watch以及pull我的最新配置(雖然目前還沒有什麼人watch…)。

之前的做法比較傻,為了讓Git和Hg管理同一個目錄,通常操作完Hg的push,然後再用Git進行commit然後push,雖然也是能達到版本庫同步的目的,但是很繁瑣,因為要分別用Hg和Git進行commit和push操作,有時候還會面臨merge問題,實在不是一個好方法。

那肯定是有更好的方法咯?當然!有一個Hg的插件叫做Hg-Git正好滿足了這樣的需求。

什麼是Hg-Git

Hg-Git是Mercurial(Hg)的擴展插件,為Hg增加了從Git伺服器pull和push到Git伺服器的功能。這意味著你可以從Git的伺服器上pull代碼然後轉變成Hg版本庫來進行管理,同時意味著你可以同時把你的Hg版本庫push到Git伺服器。

安裝Hg-Git

簡單方式

在你的命令行終端里運行easy_install hg-git,然後查看你的~/.hgrc文件里是否有如下幾行代碼

[extensions]
hgext.bookmarks =
hggit =

esay_install 是python 包管理工具,它的作用類似於Php中的pear,或者Ruby中的gem,或者Perl中的cpan,或者haskell 中的cabal。

手動方式

從Hg-Git託管在Github的代碼庫http://github.com/schacon/hg-git/zipball/master里下載然後放置到某個目錄。當然前提是你安裝了0.4.0或者更新版本的dulwich。你可以使用easy_install ‘dulwich>=0.4.0’ 命令進行安裝如果你安裝了setuptools。接著打開你的~/.hgrc文件,複製並編輯如下配置

[extensions]
hgext.bookmarks =
hggit = [path-to]/hg-git/hggit

這樣就安裝好了Hg-Git擴展,這裡的配置中bookmarks的配置並不是必須的,但是當在push的時候它會被轉化成Git的heads。

用法

如果你想要用Hg clone一個Git版本庫,只需使用hg clone [url]便可,例如

$ hg clone git+ssh://git@github.com:Leeiio/Vim.git

push的命令也很簡單

$ hg push git+ssh://git@github.com:Leeiio/Vim.git

如果不想每次輸入這麼長的git伺服器地址,你可以打開.hg/hgrc文件,編輯如下

[paths]
default = https://leeiio@bitbucket.org/leeiio/vim
git = git+ssh://git@github.com:Leeiio/Leeiio.git

這樣便可以直接使用如下命令來進行push操作了

$ hg push git

更多使用方法參見 http://github.com/schacon/hg-git

同步目前已存在的Hg版本庫到Git

從bitbucket伺服器clone一份Hg的版本到本地做示範用,如果你本地已經存在一份需要被轉換以及同步的Hg版本庫就略過此步驟,只要cd要你的Hg管理的項目目錄即可。

$ hg clone https://leeiio@bitbucket.org/leeiio/vim vim-test
requesting all changes
adding changesets
adding manifests
adding file changes
added 23 changesets with 418 changes to 239 files
updating to branch default
239 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd vim-test/

創建一個bookmark,然後push到Git伺服器

$ hg bookmark -r default master
$ hg push git+ssh://git@github.com:Leeiio/vim-test.git
pushing to git+ssh://git@github.com:Leeiio/vim-test.git
importing Hg objects into Git
creating and sending data
git::refs/heads/master => GIT:092e7cf3

如果你想從Git伺服器上pull最近的更新的話也可以直接是用Hg的pull命令

$ hg pull git+ssh://git@github.com:Leeiio/vim-test.git
pulling from git+ssh://git@github.com:Leeiio/vim-test.git
importing Hg objects into Git
Total 0 (delta 0), reused 0 (delta 0)
importing Git objects into Hg
(run 'hg update' to get a working copy)

是不是超級簡單且強大的一個玩意?如果你也有這樣的需求,那麼就下載Hg-Git試試吧!

37 Responses to 同步你的 Mercurial(Hg) 和 Git 版本庫

  1. 小天 says:

    博主您好,請問可否交換下友情鏈接呢

  2. 硬碟被格 says:

    🙄 純飄過,只熟練於svn,慚愧!

  3. Max Lee says:

    呃。。。完全不懂是什麼。。。慚愧。。。

  4. 說的很對,我很贊同

  5. 丸子 says:

    好東西不早分享。。。git用得不習慣。。。 🙁

  6. MOPVHS says:

    果斷去試試嘛~~~

  7. 小野大神 says:

    我那個腦殘公司還在用VSS 2005 = =..最近特別開會強調, 要加強開發管理, 養成每日使用VSS check in/ checkou習慣. 對此除了無語我真的無話可說.

    PS: 試用了Git.. 決定還是繼續用svn管理自己的源碼庫, 分散式版本控制系統離開多人並行開發和源碼合併就毫無意義.

    • Leeiio says:

      @小野大神 恩,一個人的話確實svn還是比較適合的,並且有google code可以託管代碼,但是用git的話因為有github這個強大的託管網站,所以還是不錯的。

    • 路人 says:

      @小野大神 用source safe就是腦殘公司了?你這種想法才是比較腦殘的。source safe非常適合所有開發者都位於同一個區域網上,而且彼此間的物理距離很近的情況,我敢說,你那腦殘公司絕對屬於這種情況。

  8. 小邪 says:

    .. 太高端了 ~
    我還在糾結於在ubuntuServer裡面安裝gd-2.0.35.tar.gz ~
    先解壓,然後./configure –prefix=/usr/local/gd2 ~
    然後make,接著就木有了 ~
    root@LinuxSrv:/home/evlos/bags/gd-2.0.35# make
    cd . && /bin/bash /home/evlos/bags/gd-2.0.35/config/missing –run autoconf
    FATAL ERROR: Autoconf version 2.54 or higher is required for this script
    make: *** [configure] Error 1
    剛才configure都進行到了config.status: executing depfiles commands ~
    哎,杯具,你知道怎麼回事不? 😳 😳 😳

    • Leeiio says:

      @小邪

      zlib包
      shell> ./configure --prefix=/usr/local/zlib
      shell> make check
      shell> make install
       
      libpng包(支持PNG)
      shell> ./configure --prefix=/usr/local/libpng
      shell> make
      shell> make install
       
      jpeg-6b包(支持jpg格式)
      shell> ./configure --prefix=/usr/local/jpeg-6b --enable-share --enable-static
      shell> make test
      shell> make
      shell> make install
      shell> make install-lib
       
      freetype包(字體支持)
      shell> ./configure --prefix=/usr/local/freetype
      shell> make
      shell> make install
       
      最後安裝gd包
      shell> ./configure --prefix=/usr/local/gd2 --with-jpeg=/usr/local/jpeg-6b --with-zlib-dir=/usr/local/zlib --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype
      shell> make
      shell> make install
    • 小邪 says:

      @Leeiio 哇,太詳細了,感動ing ~ 😥 😥 😥 😳 😀
      多謝,成功鳥 ~

    • Leeiio says:

      @小邪 客氣客氣,舉手之勞。

  9. 畢揚 says:

    看不懂。。慚愧

  10. Snow says:

    :mrgreen: 這裡還是那個亂。但是很有序。哈哈哈。我要開始鑽研wp了。得給公司弄個網站。

  11. 抽屜 says:

    我比較喜歡Git 🙂

  12. 德意 says:

    我什麼都看不到。。。。

  13. kuaibo says:

    不錯。哥哥飄過..

  14. 美女 says:

    預祝博主國慶快樂,合家美滿!

  15. 驚,看看美女是怎麼造出來的http://www.1688lx.com給你揭秘

  16. 桂花樹 says:

    桂林桂花園,專業的桂花樹基地。

  17. Showfom says:

    😆 Pia!(o ‵-′)ノ」(ノ_<。) 還不更新

  18. 冷空氣襲來,大家注意保暖了。現在,看一個感冒可貴了!!!

  19. 說得很好,又學到新知識了,謝謝。。。。

  20. 娛人碼頭 says:

    來這裡耍耍,學習下博客的操作技巧,博主不要介意。

  21. 意美 says:

    你們都是大神啊.什麼都懂啊.

  22. 9hills says:

    hg看起來確實比git更加容易上手,而且擴展,文檔之類挺多的

    另外,watch了lz的vim配置,正在研習中

  23. Lex Li says:

    沒有講到push的前提是需要git方面的設置。如果加上這個步驟文章就更加全面了。

  24. Pingback: 大蕉 » Hg代碼管理轉換Git代碼管理-方便xcode使用Git

  25. sp42 says:

    支持HG!

Leave a Reply

Your email address will not be published. Required fields are marked *