我為什麼更喜歡用Git

來源:互聯網
上載者:User

我為什麼更喜歡用Git

之前,我寫了一篇文章《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一下主幹,下次My Code迴歸主乾的時候,看起來就像是自然而然append到主幹最後的幾個提交一樣,完全是線性而且清晰的曆史,再經過我精心合并後,就能產生很美的效果。

強大民主的社區

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

結論

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

GitHub 教程系列文章: 

GitHub 使用教程圖文詳解   

Git 標籤管理詳解  

Git 分支管理詳解  

Git 遠程倉庫詳解  

Git 本地倉庫(Repository)詳解  

Git 伺服器搭建與用戶端安裝   

Git 概述  

分享實用的GitHub 使用教程  

Ubuntu下Git伺服器的搭建與使用指南 

Git 的詳細介紹:請點這裡
Git 的:請點這裡

本文永久更新連結地址:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.