前陣子把公司裡所有的 repository 全部換成 Git 了...
由於 Git 與 Subversion/Mercurial 運作的方法不一樣,換完後也跟著換 Workflow。
原先 Subversion (1.5+) 對 branch 的 Workflow:
- 開
branches
與 trunk
兩個目錄,平常測試時都在 trunk
裡測試,測完後 merge 到 branches
再 deploy 到 production 主機上。
- 缺點是,如果同時要測很多東西,merge 時得自己挑 revision。
用 Subversion 用一陣子,受不了他的速度後,有陣子在評估 Mercurial 與 Git。當時一直搞不定 Git 的 hook,所以就選了 Mercurial,所以有些 repository 用 Mercurial 開發了一陣子...
在 Mercurial 上,local branch 的功能一直沒搞定,所以會轉成 Mercurial 的 repository 都是不需要 local branch 的功能。當時從 Subversion 換 Mercurial 速度快了許多。
最後全部換成 Git 的主要原因是需要 local branch (anonymous branch),branch 的 Workflow 變成:
- 主程式碼都在 master,所有的新功能 (以項目為單位) 開 branch 發展,最後再 merge 回 master。中央的 server 只放 master branch。
速度比 Mercurial 又快了不少,local branch 也成熟,gitweb 畫面還蠻好看也是主因 (也許會試看看 cgit,畫面看起來也不錯),這次換完後大家都還蠻開心的?
Subversion 轉換成 Git 的工具是 git-svn,把 branch 抓下來後去掉 Subversion 的資訊,直接將 master branch 推上 server。
Mercurial 轉 Git 用的是 fast-export,轉的速度相當快。轉完後要更改 branch 名稱,再將 master branch 推上 server。