那些台灣軟體產業所缺少的 – 版本控制系統

标签: 中文文章 分享 嘴砲 | 发表时间:2011-10-20 12:02 | 作者:victor chitsaou
出处:http://blog.ez2learn.com

這幾年來,多多少少接觸了不少業界的人,雖然我自己還不算有真正待過業界太久,但是這期間看到不少業界的現象都令我挺驚訝的,例如在聊天時提到你們公司用的版本控制系統是什麼,有很多人都會回答 「那是什麼?」,一直以來這些在國外的主流開發環境都基本常識或是標準配備的東西台灣業界居然很多都連有那樣的工具存在都不知道,或著是對於某些東西有錯誤的認知,所以我想大略提一下常見的幾個問題

版本控制系統

我想這是最常見的毛病,很常發現很多公司在開發軟體時從來都不使用版本控制系統,最誇張的狀況就是管它三七二十一直接修改

 

除此之外,常見的土法鍊鋼有聽說過資料夾複製,然後將資料夾名稱命名為版本1之類的方法,高級一點還有搭配Excel來記錄改過了什麼之類的

更進階的還有多人共同開發,還架了FTP來放這些檔案

但這些都有很大的問題,而且其會遇到的問題都正好是版本控制系統所要解決的,所以到底是什麼樣的問題非用版本控制系統不可?

首先,用資料夾copy有個很大的問題,一來是copy的過程很容易出錯,而且更糟的是出的錯很難發現,你怎麼從資料夾的內容來判斷這到底是哪個版本? 最常見的做法就是回想你到底在哪個版本改了什麼,然後去看對應的位置,是否有那些改動,但你有可能記得嗎? 要是程式不是你改的呢? 因此依賴資料夾名稱來得知檔案的版本是極度不可靠的做法,再者,如果你不幸改到錯誤的版本,辛辛苦苦改了半天,才發現改到舊版本了,那你要如何把你改的和正確的版本合在一起? 如果你只改了三行,這還好辦,但如果你改了三百行,那該怎麼辦? 用Excel來記錄改動的事項和版本一樣不會有幫助

那多人開發使用FTP來分享檔案呢? 老天,事情更慘了,原先只是你自己的開發,自己改錯了就算了,如今變成多人開發,有時出問題還不是你改的,這樣想好了,FTP上有個檔案

hello.py

今天張三載回去改了,變成

hello.py (張三版)

不幸的是,王五在張三上傳回FTP之前,也載回來改,變成

hello.py (王五版)

接著,張三把它的檔案上傳了,所以FTP上的檔案變成了

hello.py (張三版)

然後好戲發生了,王五也把它改的東西上傳了,所以FTP上的檔案被蓋掉,變成

hello.py (王五版)

發生了什麼事? 張三改的版本被蓋掉了,你可以想見張三在demo給老闆看時發現改的地方被蓋掉了,翻過辦公桌衝過去揍王五的情景了嗎? 像這樣還只是最簡單的情境,以這類土法鍊鋼的方式,還有太多太多預料不到的複雜情況會發生,什麼? 那你說,如果我們規定每人都得把資料夾以自己的名稱命名,加上版號,再上傳,這樣就不會錯了吧?

hello_project-王五-rev123/

拜託,何苦呢 ? 版本控制系統就是用來解決這些問題而開發出來的,學一套新工具有這麼難嗎? 常見的理由可能會有什麼沒時間學、不信任工具等等,事實上那些都不是理由,只要是程式碼的開發,都得使用版本控制系統,現在已經是2011年,如果你的軟體開發沒有使用版本控制系統,我說這不叫落後,這是原始

用了版本控制系統,最重要的好處是

你可以安心地放膽去改程式

什麼是版本控制系統?

講了那麼多,所以版本控制系統到底是什麼? 這麼來形容好了,如果你有玩過RPG遊戲,像是仙劍奇俠傳、軒轅劍等等,你一定知道遊戲打到一半可以存檔,然後也可以讀檔,接續先前的遊戲進度,如果你發現目前的等級太差了,打不贏魔王,你可以讀前面一點的檔案來重新練,或是前面的寶物忘記拿,也可以讀檔回去拿

而版本控制系統做的事情,就和RPG裡的遊戲存檔是一樣的概念,你可以將目前程式開發的進度的快照存下來,當你發現改的檔案有問題,可以回朔到以前的版本,除此之外,它還可以幫助你找出兩個版本的差異,你再也不怕不小心改了哪一行結果都不知道,也不怕你的同事幫你偷改了幾行結果你卻不知道,甚至還可以合併兩個不同的分支

版本控制系統有哪些? 我該用哪一套?

版本控制系統在幾十年前就已經有現成的工具,然而一直一路演進到今天,現在的版本控制系統已經相當先進且成熟,週邊的工具或是平臺也都相當齊全,從20年前的CVS看起,介紹一些最主流的

CVS

算是古董級的版本控制系統,主要用於open source的開發,特色是可以多人共同使用,缺點是如果多人要存取同個檔案,要先將檔案鎖起來,很多時候會鎖了忘了開,造成別人無法使用,雖然已經至古董了,但是因為很多大型的開源專案還在使用這系統,所以現在多少還看見有人使用,但不建議一般用途使用

Subversion

Subversion簡稱svn,約十年前出現,是CVS的繼承者,主要是改進CVS的缺點,像是最重要的改進,就是檔案鎖定的問題,SVN以試著自動合併檔案的方式來解決同時有兩人修改同一個檔案的問題,現今很多開源專案也還在使用SVN

Git & Mercurial

接著時間來到了現代,分散式版本控制系統成為了新興專案的主流,在這些新的系統中,檔案庫不在是集中式的,而是分散式的,原本commit都要集中送到中央檔案庫,現在不同的檔案庫之間可以互相傳送對方沒有的commit,如此一來讓開發更加容易,即使沒有網路也可以在本地端commit之後再送給遠端的檔案庫,除此之外,它們引入的新特性也讓合併兩個分支之類的事變得更加容易,個人推薦如果你還沒有用過版本控制系統,可以直接學這些現代的工具,以前的工具大多都已經很少人在使用,可用的資源也在變少中

Git 的簡介

Git是Linus Torvalds開發用來管理Linux核心程式碼用的系統,特色是這套系統以效率為設計的考量,並且支援很多較低階的檔案歷史處理,支援的主流免費檔案庫有

Github.com

Bitbucket.org

原先Bitbucket只支援Mercurial,這幾天也支援Git了,而Github和Bitbucket的差別在於,Github如果想開私有的檔案庫要錢,而Bitbucket不用,而且是無限個數

如果你想學Git,個人推薦讀

Git pro

裡面講得非常清楚而且詳細,也有圖說明系統的運作,相對的,如果是讀其它的文件,大多數都很難懂,因為都是寫給geek看的,看不懂是很正常的,整體看起來,Git比Mercurial還難學,除此之外還有一個缺點就是對於Windows的支援較差

Mercurial的簡介

Mercurial是基於Python的分散式版本控制系統,特色是以較簡易使用,並且很重視檔案修改的安全性為考量的工具,像是Git有很多指令,一下錯你改的檔案可能因此而遺失,這類情況在Mercurial中較少,大部份指令都會幫你自動備份,如果弄錯指令通常還有救

主流的檔案庫平台是

Bitbucket.org

如果你想學Mercurial,個人推薦看Joel寫的

Hg Init 教學

個人較喜歡Mercurial的原因是它的GUI介面工具較為豐富,像是有

TortoiseHg

MacHg

SourceTree

等好用的GUI工具

最後

我在大學教過的教學用投影片,可以參考看看,未來有空的話或許我可以寫一些這方面的教學,因為畢竟中文資源很少,似乎也沒專門的書在講這些工具的使用

相关 [版本控制] 推荐:

新人 Git 版本控制教學

- - 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY
昨日去台北簡報如何快速學習 git,投影片主要是給新手 git 基礎介紹,如何使用 branch model,git submodule 及 tag. 內容不會很難,適合之前就玩過任何一套 version control 的使用者來閱讀,如果有 svn 基礎,學習會比較輕鬆. 簡報搭配 github 內容來教學.

RESTful API版本控制策略

- - ITeye博客
做RESTful开放平台,一方面其API变动越少, 对API调用者越有利;另一方面,没有人可以预测未来,系统在发展的过程中,不可避免的需要添加新的资源,或者修改现有资源. 因此,改动升级必不可少,但是,作为平台开发者,你必须有觉悟:一旦你的API开放出去,有人开始用了,你就不能只管自己Happy了,你对平台的任何改动都需要考虑对当前用户的影响.

Google Code 开始支持 Git 分布式版本控制系统

- Haisheng HU - 谷奥——探寻谷歌的奥秘
今天开始,托管在Google Code的项目可使用Git来管理了,Git是一个类似Mercurial的分布式版本控制系统(DVCS),包括Android和Linux内核等很多知名的工程都是用Git管理的. 现在在创建工程,或在Administration - Source 里修改工程的时候,都可选择Git作为版本控制系统了,而且支持所有的Google Project Hosting功能,包括工程更新、高级问题追踪、简单易用的VCS支持 Wiki.

三個使用版本控制系統的建議

- - ihower { blogging }
(本文 crossposting 於 ALPHACamp Blog). 如果說有什麼是開發軟體專案一定要使用的基礎工具,使用「版本控制系統」應該可以記上一筆. 無論是個人或是團隊開發,都可以透過版本控制系統獲得巨大的好處. 沒有版本控制系統的話,檔案可能被別人或自己不小心覆蓋或遺失、也不知道是誰因為什麼原因改了這段程式碼、也沒辦法可以復原回前幾天的修改.

使用flyway对应用的数据库版本控制

- - Java - 编程语言 - ITeye博客
转载自:http://kkuang.net/why-db-migration-tools-flyway/  . 为什么要使用DB migration tools. 我们可以想象,多位开发人员,多个数据库环境. 先前有用过mybatis中的migration,但经常出现莫名其名的异常,并且也不支持多条SQL在1个文件中.

数据库版本控制完全指南

- - 极客521 | 极客521
在这个充斥着大数据与商业智能的新代时,唯一不变的技术就是变化,尤其是在数据库方面. 出于数据统计、继续增加的对服务的需求,以及规定制度等方面的原因,几乎每天都有业务方面的变更需求,这些都会对数据库产生变更需求. 当数据库变更发生时,能否从自动化中获得更大的敏捷性,以较少的资源实现较多的功能,正是那些具有高度竞争力的世界级企业在芸芸众生中脱颖而出的关键因素.

Spring Cloud版本控制和灰度starter-spring-cloud-gray

- -
Spring Cloud Gray - 微服务灰度中间件. Spring Cloud Gray 是一套开源的微服务灰度路由解决方案,它由spring-cloud-gray-client,spring-cloud-gray-client-netflix 和 spring-cloud-tray-server,spring-cloud-gray-webui组成.

服务API版本控制设计与实践

- - DockOne.io
【编者的话】笔者曾负责vivo应用商店服务器开发,有幸见证应用商店从百万日活到几千万日活的发展历程. 应用商店客户端经历了大大小小上百个版本迭代后,服务端也在架构上完成了单体到服务集群、微服务升级. 下面主要聊一聊在业务快速发展过程中,产品不断迭代,服务端在兼容不同版本客户端的API遇到的问题的一些经验和心得.

那些台灣軟體產業所缺少的 – 版本控制系統

- chitsaou - 程式設計 遇上 小提琴
這幾年來,多多少少接觸了不少業界的人,雖然我自己還不算有真正待過業界太久,但是這期間看到不少業界的現象都令我挺驚訝的,例如在聊天時提到你們公司用的版本控制系統是什麼,有很多人都會回答 「那是什麼?」,一直以來這些在國外的主流開發環境都基本常識或是標準配備的東西台灣業界居然很多都連有那樣的工具存在都不知道,或著是對於某些東西有錯誤的認知,所以我想大略提一下常見的幾個問題.