Git基本思想:從SVN轉到Git

在蟲蟲管理的一個2000人QQ群中很多人也時常問這個問題,總之Git和SVN是兩個完全不同思維方式的版本管理,理解Git要完全拋棄SVN的思維和操作,如果還想以老的方式思維來用Git話,蟲蟲不建議他來用Git。

Git基本思想:從SVN轉到Git

Git相比叫傳統的基於文件SVN優勢明顯,主要體現在天然分佈式不怕丟失;不以文件為為基礎,基於Git的數據庫(commit哈希健值文件)的版本管理,分支、標籤等操作飛速,而不是緩慢地文件和目錄操作;Git下每個人都有一個獨特的工作區和分支,不必實時和中心服務器同步就可以;帶有社交性質的基於Fork——PR(MR)流程的,協作版本管理;最後就是基於gitlab running/github webhook的CI/CD開發一棧自動化流水線或者DevOPS。以上各個點都是Git的巨大獨特的優勢,下面蟲蟲給大家一一論述下。

天然分佈式版本庫存儲

和SVN中心集中式文件管理的倉儲管理不同,Git從設計到誕生就以融入了分佈式基因。雖然Git也有服務器端的Github、Gitlab、Gogs等多種服務器端,但是Git所有操作都可以無服務器存在,你可以只在本地都能完成所有git操作,可以在目錄之間實現clone、push和pull等需要服務器端的操作。設置權限和通訊方法後,Git客戶端直接也完全可以實現這些操作。所以我們說Git是天然分佈式,無需中心服務器 介入。Git服務器的引入一個好處就是把一些操作(比如添加證書,建立賬號、倉庫元信息)和通訊傳輸方法(http、ssh),及大量更多擴展功能在服務器端Web界面實現了,方便了用戶的使用。

分佈式的一個好處是代碼變化push好的倉庫數據,最少保留兩份:本地一份和服務器一份,不怕丟。

Git是數據庫,不是目錄文件

Git中倉庫信息都是以hash健值方式保存文件相當於一個數據庫,當用戶子工作區做了add操作後,此後變化信息就成了Git對象數據庫了(blob、commit、three對象)。通過git命令(git clone checkout rest)可以實現把git數據庫(commit歷史庫和暫存區),變化成用戶實際接觸到文件和目錄的工作區。

這是Git,獨特之處和優勢之處,也是很多初學者迷惑指出,尤其拿之前使用SVN的人無法理解的。Git的四個區(工作區、暫存區、本地倉庫區和遠程倉庫區),五個狀態轉化流程如下:

Git基本思想:從SVN轉到Git

知道了這些Git就很多問題就都很好理解了。比如分支,比如標籤tag,比如Head這些都是對特定commit的指針,所以對拉分支,分支間轉化都很容易,不過把指針(分支,Head)指向某個commit,然後利用該commit ID再生成工作區而已,看上去就和在不同分支的文件目錄下切換,而且非常迅速,因為Git的是按照差異對比來生成差異的目錄和文件的。

Git的社交性和協作(Fork——PR/MR)

Git能夠有現在這麼流行,當然還是歸根於其社交協作性質。基於Fork和PR/MR的協作流程鼓勵了任何人都可以參與到項目中來而無需做其他特殊操作,無需特殊權限設置和申請。通過Fork操作把任何倉庫都變成自己Owner的倉庫,然後想怎麼改就怎麼改,想怎麼操作就怎麼操作,完全有自己做主。改完了可以通過PR(github:Pull Request)MR(Gitlab Merge Request)在提交給遠倉庫,該過程可以自動做對比,原項目管理者可以review變化,如果沒問題就可以Merge 合併到倉庫,完成一個完美的協作閉環操作。

Git基本思想:從SVN轉到Git

由於這種社交性質的協作流,使得git廣泛地流行起來,也帶動了相關網站Github和Gitlab也流行起來。Githhub號稱”全球最大的同性別交友平臺“(碼農大多數是單身男)就是這麼來的。

基於Git的CI/CD和DevOps

這是也git才特有的功能,藉助於Gitlab runner和webhook實現代碼發佈後,自動編譯、自動測試、自動安掃、自動發佈的一棧式自動化流程,大大釋放開發過程繁雜的人力投入和流程,實現敏捷開發,快速迭代。這是目前的軟件開發的大勢和未來發展的方向。特別是雲和容器的技術的發展和不對實踐完善,這種一棧式解決方案越來越成熟,實現的功能越來越多,也被越來越多的企業開發團隊所採納。

Git基本思想:從SVN轉到Git

而且這一切實現在git來說就是一個yml配置而已,push後,後面一切都自動化完成,並反饋信息。很神奇很憧憬把。那就關注蟲蟲,來跟蟲蟲來學git和 DevOps。


分享到:


相關文章: