1. 程式人生 > >Git-總結篇-給我們帶來了什麼?

Git-總結篇-給我們帶來了什麼?

前言

  最初個人並不認為有必要專門準備一片文章記錄Git的優勢或者如題“給我們帶來了什麼”這樣的主體,但是想到這是Git相關學習和使用的總結,所以決定單獨記錄一篇文章;

本文僅記錄本人使用學習Git中實際接觸過的範圍,並且會持續更新;

Smart的本源

smart;有道翻譯:聰明的;巧妙的;敏捷的;厲害的;瀟灑的;劇烈的;時髦的;

  在使用Git恰好一年的時間節點上開始準備這篇文章,現在回想Git的直觀感受,一如既往還是最初的印象,聰明的、巧妙的、敏捷的、厲害的;
  在總結Git的優勢的之前,有必要先了解一下Git的實現邏輯和特性(個人建議至少要了解),並且也給本文定一下規範,在列舉各項優勢的同時提供當前優勢的支撐點(即實現因素)和場景案例(切身實際會給我們帶來的好處),這樣總結才會更有意義;

特性

Git的底層實現方式決定了自己的特性:

檔案快照儲存方式

  • 以檔案快照實現的底層檔案儲存系統;
  • 通過對原始檔的索引,不重複記錄無變更的檔案,實現在切換版本時無需額外的差異計算過程。
  • 通過指標實現分支管理,將分支的建立和其他操作的代價降到很低;
  • 上述的方式將版本操作的代價降到了最低,達到了輕量級的效果;

分散式版本控制

  • Git中每個克隆(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來建立屬於你自己的版本庫,同時你的版本庫也可以作為源提供給他人,只要你願意。
  • Git的每一次提取操作,實際上都是一次對程式碼倉庫的完整備份。
  • 提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交是獨立不受干擾的。
  • 甚至基於舊版本的改動也可以成功提交,提交會基於舊的版本建立一個新的分支。
  • Git的本地操作不會被打斷,衝突會直到本地與遠端庫進行互動時才會提示。
  • Git上述的特性決定了對離線使用的支援,只需要在與遠端庫互動式保證網路即可;
  • 衝突解決不再像是SVN一樣的提交競賽,而是在需要的時候才進行合併和衝突解決。
  • 可以為 Git 版本庫進行授權:誰能建立版本庫,誰能向版本庫PUSH,誰能夠讀取(克隆)版本庫
  • Git提供 rebase 命令,可以讓你的改動看起來是基於最新的程式碼實現的改動
  • Git 的集中式工作模式非常靈活
  • Git 也可以模擬集中式的工作模式
  • Git 有更多的工作模式可以選擇,遠非 Subversion可比

特點

同樣,Git的特性決定了自己特殊的特點;

快捷

  • 快速
  • 方便
    首當其衝當然是在操作上帶來的提速;
    體現在常用的版本切換操作(提交,回退,切換分支,以及合併分支等)
支撐點
  • 檔案快照儲存系統和分支指標
  • 並且受益於簡潔明瞭的命令列和Idea介面良好的支援,達到了快速和方便;
場景案例
  • 分支版本的快速操作;w\
  • 分支的快速切換;

安全

  • 節點互備
  • 遠端服務備份
支撐點
  • 分散式管理
場景案例
  • 規避集中式系統單點故障

離線工作

  • 本地獨立操作版本,無需網路支援;
支撐點
  • 分散式管理
場景案例
  • 不再對網路,無論是外網還是區域網的強依賴

獨立工作

  • 本地有完整的版本庫源,本地操作不受任何其他伺服器節點影響
支撐點
  • 分散式管理
  • 分支管理
場景案例
  • 不論是開發成員之間還是單開發成員的不同分支管理更能夠保持自主的獨立性
  • 各分支分支的起始、結束版本以及合併時機更支援自由控制
  • 同樣,即使在可預見有衝突的情況下,也可以靈活自主的選擇合併衝突的時機,從而也降低了

靈活工作

  • 不論本地庫和遠端的關聯還是本地分支和遠端分支的關聯都可以方便的進行切換
  • 可以使用Git的Submodule管理對模組專案中子模組進行區分管理
支撐點
  • 分散式管理
  • 分支管理
場景案例
  • 本地庫和遠端庫的關聯隨時切換,可以實現多對多的關係
  • 本地分支和遠端分支的關聯也是多對多,同一個本地分支可以推送至任意當前關聯遠端庫的遠端分支,也可以從任意遠端分支進行拉取

不足

  • 許可權管理很難控制,尤其是在多模組專案中很難處理開發人員僅有部分許可權的問題;

總結篇

自由的工作方式

  • 自由的工作方式可以算是對上述特點的總結;
  • 雖然是分散式系統,但完全可模擬集中式模式管理;
  • 低成本的分支操作,激活了分支概念的實用性;是分支的作用最大化;

友好的環境支援

  • 當前Git已成為並且會相當長時間內持續作為版本控制的不二之選,並且除了GitHub之外,有了更多優秀的遠端庫開放服務出現,比如碼雲、阿里雲Code等等,我們不再需要顧慮遠端服務的搭建和維護;
  • 使用Git,會給開發人員線上分享或學習時提供便利,每個開發人員應該儘快加入Git;

參考&引用文獻