Git的強大,其他SVC怎麼辦?
這兩天花了很多時間研究這幾年來非常流行的Git。
總而言之,Git就是一個source version control的工具,一開始我真的不以為意。有什麼功能是其他家沒有的?大家都是source version control啊,有什麼特別了不起的?SVN流行很久,Perforce也是很多大企業在用,大家都可以check-out/check-in/branch/merge/revert ... Git不過就是另外一套而已啊~我錯了。
Git在兩點先天上就比全部市面上看得到的source control工具強大太多:
總而言之,Git就是一個source version control的工具,一開始我真的不以為意。有什麼功能是其他家沒有的?大家都是source version control啊,有什麼特別了不起的?SVN流行很久,Perforce也是很多大企業在用,大家都可以check-out/check-in/branch/merge/revert ... Git不過就是另外一套而已啊~我錯了。
Git在兩點先天上就比全部市面上看得到的source control工具強大太多:
- 分散式架構
- 強大的branch管理機制
先講為什麼會吸引我,敝公司官方使用的是Perforce,他跟微軟很古老的那套Visual SourceSafe一樣,client必須跟server保持連線才有辦法做事,簡單說,沒連上線你連check-out都不行,所以只要網路一斷,基本上就是收工了。做任何事client必須跟server隨時保持互動,這非常麻煩討厭,基本上光是維持連線就會讓我的生產力下降。
而Git完全沒有這個限制,每個client本身也具備傳統source version control server可以做的事,平常工作只需要跟自己溝通,server的工作基本上講白了只需要保存你的code的內容和狀態(所以稱之為Repository比較正確),其他的操作都是在client上完成,當需要存放到repository保存時才需要push內容到Git repository。這樣client可以在任何環境任何狀態下工作,在家裡寫code,回到公司再push到Git repository;在咖啡廳寫code也一樣,甚至你要到擎天岡去寫code,沒有網路照樣讓你可以工作(某方面來說好像也不是好事 XD)。用了Git,從此你不再需要時時刻刻和SVC server保持連線。
再來,更屌的一點,完爆其他source version control工具的地方就是超級強大的branch-merge功能。我們在軟體開發上最痛苦的不外乎,一邊寫新功能,另外一邊改舊bug。當一個系統已經上線,並且開始著手開發新功能的同時,如果測出上線的系統有bug,大部分只有兩個方法:
- 比較土炮的是把新寫的功能全部comment掉,然後回去改舊bug,再commit上source version control server,接著release上好patch的build。
- 在source control server上開一個新的branch,從上一回的revision開始把master和development這兩個code line分開,然後到時候開發好新功能再把development的code line merge回去master
第一個方法不消說,爛爆了,而大部分的人,包括我都是用這個方法。為什麼呢?因為第二個方法實在成本太高,要把兩個code line結合要花費大量的心思和時間,而且以Perforce為例,他開一個branch是真的在你的檔案結構上開一個新的資料夾,並且把所有master上的source code複製一份到新的目錄上。老實說這樣有跟沒有一樣,跟土炮方法沒差多少,操作merge時如果Perforce指令不夠熟,還很容易出錯,所以這就是為什麼大多數人都乾脆不選擇或是不學習branch的方式。
但是Git不一樣,他甚至非常鼓勵你盡量開branch,Git會幫你控制code line之間的檔案結構,也就是說他不會蠢到開一個新的資料夾,把master的source code全都複製過去就跟你說這是新的branch。原因在於Git的資料結構設計得非常優秀(這邊不得不欽佩Torvalds Linus的天縱英才,沒錯,Git也是他發明的,Linux也是)。Git會幫你處理多個branch彼此之間互相merge的事,當然或多或少會有改到同一隻程式,然後出現conflict的問題,但仍然是比其他source version control的工具好上太多太多。
打個比方,現在我要寫好主程式,要處理error,可是處理error需要等另外一個同事完工後才能使用,這時候我不用閒著等,我只需要開一個新的branch: ErrorHandling,然後在這個ErrorHandling branch中我把暫時可以完成的code都先寫好,然後切回原本的其他branch繼續其他功能的開發,等到另一個同事把error handling的部分做完,再切到ErrorHandling branch把另外一個同事寫的部分整合起來,最後再和master做merge。這個場景大大改變了原本開發的習慣,這就是Git神奇且強大之處。
任何開發人員只要稍稍用過Git,都會回不去。所以請慎入,小心中了Git的毒。
相關資源:
- 官方網站:
- Git - 大本營,有免費資料可以看,基本上一個晚上可以看完。看完不敢說變高手,但起碼正常的使用應該沒問題。
- 開放免費的Git repository:
- GitHub - 很有名,很多社群把code放在上面,Google也說他們的Google Code要收山了請搬到GitHub。
- Bitbucket - GitHub的競爭對手,開private repository不用錢!所以我放很多東西在這上面。
- Gitlab - 另外一個GitHub的競爭對手,不過競爭方式有點不同,企業內部可以架設自己的Gitlab repository,敝公司內部就是用Gitlab當Git repository
- Client軟體:
- SourceTree - 好用且免費的Git GUI client,Bitbucket的母公司Atlassian出的免費好用佛心產品。
- Tower - Mac上的另外一套Git GUI client,沒用過,聽說功能和SourceTree不相上下,但是要錢。
- TortoiseGit - Windows上的另一個Git GUI client,如果你喜歡TortoiseSVN那一套,大概會喜歡這個,我個人是不喜歡啦(只是之前用SVN好像沒啥選擇)。
- Git GUI client - 官方的Git GUI client介紹。
留言