歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 我為什麼更喜歡用Git

我為什麼更喜歡用Git

日期:2017/2/28 13:58:47   编辑:Linux教程

之前,我寫了一篇文章《SVN為什麼比Git更好》,主要是從非常樸實和現實的角度,從一個為全團隊選型的角度,分析了為什麼SVN比Git更好。但是公私分明,作為我個人來說,我想我還是更喜歡Git的。

全分布式設計

分布式計算,早就是這個時代的趨勢和潮流了,為什麼版本控制不應該分布式呢?分布式到底有何好處呢?很多書會寫,每個拷貝,都是整個版本庫的鏡像,(這是優點麼?),災難恢復比較容易,(因為每個人鏡像的人,都是整個全部版本庫,多少個人克隆,就等同於多少分備份,那麼當然災難恢復容易,不過這跟我到底什麼關系?那是運維的事情),去中心化,(那又怎麼樣?寫代碼難道還要民主不成?),這些分布式帶來的好處,感覺都有點隔靴搔癢的感覺。

那麼我個人真正從全分布式設計中,獲得的好處是什麼呢?我更喜歡創建版本庫,並且保存所有的代碼了。因為任何時候,使用Git工作,都是持有整個版本庫,從0開始創建一個項目,也不例外,當你執行Git init的時候,就是真正有了一個版本庫了,過程容易的程度,讓人印象深刻。如果,使用SVN,則完全不會這麼愉悅,因為是CS架構的,所有你總是要選擇一個Server,就算全本地的場景,你也不得不安裝一個SVN Server的一些軟件,創建完了版本庫,還要網絡連接,還要checkout,即便所有的東西在本地,這個過程也並不迅速。而一旦版本庫建立在了本地,日後想要遷移,恐怕也有得痛苦,因為SVN本身不提供這種遷移機制。Git的話則完全不同,一旦你需要傳輸某個項目到某個版本庫,使用remote相關指令,輕松搞定。

Git的這種設計,會激發我將一切代碼的目錄,都變成版本庫,反正又沒什麼成本,能保證代碼不丟還能記錄版本,何樂不為?

分布式設計的另一個妙處,就是全離線操作,無論是提交代碼,創建分支,切換分支,分支合並,幾乎一切的一切,都是本地操作。所以,只要一台電腦在手,在任何地方,任何環境,我都可以愉快地寫代碼,在過去的日子,我覺得這似乎並不是什麼真實的需求,但是時代發展到了當今,我確實經常帶著電腦到處跑,而且,更加習慣帶著電腦出門了,在今時今日,這已經完全是一個頻繁的需求了。

更強大的功能

以前,在SVN下面,很多東西都被限死了。雖然減少了錯誤的概率,但是毫無樂趣,毫無掌控力,用著很死板。使用了Git,就感覺到了很多強大的東西,這讓我愛不釋手。

其中一個能力是分支創建和切換的簡便。以前SVN的分支創建,首先是一個服務器行為,你必須發指令給服務器,漫長的等待,其次,切換分支也是很痛苦的,需要從服務器下載差異,哪怕新創建的分支,執行switch也需要很久的等待。其次,SVN提供了merge tracking技術,如果一個分支經過多次merge操作,恐怕就並不會給出那麼喜人的結果了,會變得非常不智能,甚至需要手動填寫精確版本號,才可以正確地合並,所以我們常見的做法是,用完一個分支回歸trunk後,就刪除分支,下次重開,可是開分支真的很耗時,尤其版本庫大的時候,所以,程序員經常偷懶,時常在trunk直接改bug,這其實是冒了風險的。

第二個是改變提交記錄的能力。在SVN,任何東西都是一次提交,創建分支,提交,刪除分支,提交,合並分支,提交,變更代碼,提交,撤銷變更,再提交。會產生很多很多的提交記錄。為了不讓自己的一次變更散落在太多commit裡面(提交歷史記錄很不好看),我經常做法是降低提交頻率,這更是冒著很大的風險的。使用了Git,就完全不一樣了,我可以隨意提交,甚至運行腳本自動提交,而當我真的想要歸檔的時候,可以使用交互式rebase,將之前的提交都合並成一個,可以挑選一些連續的提交,將他們按照功能劃分後,合並成一個,這樣就會產生非常清晰而且有意義的提交歷史,並且不會導致代碼丟失。好爽。

Git的rebase是我喜歡的另一個功能,因為commit本身已經不是順序自然數了,所以,調整commit的順序,人是無法感知的,只能靠時間戳分清先後,在這種情況下,調整了commit順序如果能讓提交歷史更清晰的話,真的太棒了,rebase就是干這個的,我經常獨立開發一個分支,脫離主干太久,這時候我只要rebase一下主干,下次我的代碼回歸主干的時候,看起來就像是自然而然append到主干最後的幾個提交一樣,完全是線性而且清晰的歷史,再經過我精心合並後,就能產生很美的效果。

強大民主的社區

Git的去中心化設計,天然適應於開源社區,因為開源世界裡程序員各自獨立工作,互不干擾,又必須要合作貢獻開源軟件,Git很好的解決了這個問題,催生出了火爆的Github社區,在這個社區,你可以挑選各種你喜歡的項目,fork,研究,貢獻,申請pull request,這完全是一種友好的程序員式的溝通方式,如果你喜歡我的項目,請fork me,如果你想做點什麼,請pull request me,如果我認可你的努力,我會accept,這種協作的氛圍,完全異步,不需要過多的溝通,而且禮貌,太喜歡Github這樣的社區了。它催生了無數的創造力,解放了生產力。

結論

我想,更多的,resonable的原因,我估計很難想出來了,但是從一開始運用Git困難,無法學進去,到被逼著學,學會了的那種喜悅,然後就是日常開發再也離不開Git,我的轉變讓自己欣喜,我甚至覺得我已經融入了開源社區,至少也嘗試過貢獻代碼,還被原作者接受了,感覺真棒!

GitHub 教程系列文章

GitHub 使用教程圖文詳解 http://www.linuxidc.com/Linux/2014-09/106230.htm

Git 標簽管理詳解 http://www.linuxidc.com/Linux/2014-09/106231.htm

Git 分支管理詳解 http://www.linuxidc.com/Linux/2014-09/106232.htm

Git 遠程倉庫詳解 http://www.linuxidc.com/Linux/2014-09/106233.htm

Git 本地倉庫(Repository)詳解 http://www.linuxidc.com/Linux/2014-09/106234.htm

Git 服務器搭建與客戶端安裝 http://www.linuxidc.com/Linux/2014-05/101830.htm

Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm

分享實用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm

Ubuntu下Git服務器的搭建與使用指南 http://www.linuxidc.com/Linux/2015-07/120617.htm

Git 的詳細介紹:請點這裡
Git 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved