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

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

需求考量

雖然山姆鍋已經習慣 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 平台沒有原生的支援這點已經比較無所謂。