就一家軟體公司 , 版本控制系統幾乎是必備的工具 , 就算不是軟體公司 , 一般也建議採用這樣的工具來協調團隊合作 。 版本控制系統協調團隊文件 、 程式碼的修改工作 , 避免互相覆蓋而造成成果的流失 。 事實上 , 就算是一個人進行開發 , 版本管理系統依然提供許多好處 。 本文屬於 「 善用雲端服務 , 微型企業的自強之道 」 系列文章之一 。

在軟體越來越複雜的時代 , 如果有一家軟體公司可以不用版本管理系統 , 那真的算得上是奇葩 ! 山姆鍋從一開始工作 , 公司都有採用這樣的系統 , 也瞭解這樣的工具的必要性 。 然而 , 隨著技術與趨勢的變遷 , 採用的工具是會變動的 。 本文 , 山姆鍋就說明 「 影化身科技 」 所採用的方案以及背後主要決定的因素 。

需求考量

雖然山姆鍋已經習慣 Subversion, VCS 這種集中式版本控制系統 。 事實上 , 過去幾家服務的公司 , 都是由我決定採用 Subversion。 但來到雲端計算時代 , 我們有其他更好的選擇 ? 就版本控制系統 , 除了基本功能外 , 我覺得下列是幾個 「 影化身科技 」 考量的需求 :

  1. 須有雲端服務供應商 。
  2. 需要支援集中式權限管理 。
  3. 方便分散式開發 。

在山姆鍋的評估過程中 , 其實只考慮採用下列系統之一 :

  • Subversion
  • Git
  • Mercurial

「 影化身科技 」 最終採用的是 Git, 底下讓山姆鍋來說明為什麼 。 Subversion 雖然是我最熟悉的系統 , 但是從過去的經驗 , 在做 branch-and-merge 的操作上 , 效率明顯是不太理想 。 要連線才能進行 branch 這點 , 也影響開發效能 。 由於知道其他分散式版本控制系統可以改善這點 , 山姆鍋決定捨棄 Subversion。

既然不使用 Subversion, 那只剩下 Git 或 Mercurial 了 。 下列是我在選擇這兩者時使用的優劣比較 :

Git

優點

  • 採用 C 開發 , 理論上 , 執行效率較高 。
  • 支援度以及社群比較大 。

缺點

  • 沒有 Windows 原生支援 , 造成效率跟使用不便 。
  • 中文檔名支援不完善 。

Mercurial

優點

  • 使用 Python 開發 , 較容易擴充 。
  • 對 Windows 平台支援較好 。
  • 較接近 Subversion 使用的語法 。

缺點

  • 第三方服務支援較少 。
  • 中文檔名支援不完善 。

這兩者從功能 、 效率來講 , 其實差異不大 。 老實說 , 山姆鍋一開始是選擇 Mercurial 的 , 那為什麼最終會決定採用 Git 呢 ? 最大的原因在於第三方服務的支援 。 首先 , 雲端原始碼代管服務 , 不外乎 : GitHub 跟 BitBucket。 由於有些第三方服務只支援 GitHub, 但 「 影化身科技 」 私有的原始碼是放在 BitBucket, 為了避免同時採用兩種工具 , 只好選擇兩者都支援的 Git。 現在 ,「 影化身科技 」 開放原始碼的專案會放置在 GitHub。

小結

本文只是針對預先選定的三種技術來考量 , 並不是全面性的比較 。 由於山姆鍋現在的主要開發環境已經轉到 Mac OS X, 所以 ,Git 對 Windows 平台沒有原生的支援這點已經比較無所謂 。