git原理與應用

2021-09-18 02:10:56 字數 4069 閱讀 2600

目錄

1. 作用

2. 特點

3. 原理

4. git本地倉庫操作

5. git遠端倉庫

6. git衝突

7. git忽略特殊檔案

版本控制、專案託管

分布式版本控制系統:每個人都有乙個完整的版本庫,使用者之間相互不影響,唯一關聯就是提供乙個**服務平台(github、碼雲)進行資料互動。

git本地主要分為兩大塊,工作區和版本庫。工作區也就是.git所在當前目錄下的本地檔案,版本庫主要包含兩個區域,分別為快取區和git分支。主要流程是:工作區新增或建立被修改檔案——>add操作新增檔案到版本庫快取區——>commit操作將快取區內容推送到當前分支。快取區可同時進行多次add操作,一次commit提交是將快取區的所有檔案都提交到當前分支。版本庫是git比較重要的乙個區域,它記錄著git的提交歷史記錄,每一條記錄包含欄位commitid、author、date以及commit描述,git的版本控制全依賴於版本庫的提交歷史記錄。

git版本庫實際上是以類似鍊錶的形式來儲存提交記錄的,每一次提交都會在提交記錄這一條鏈上新增乙個節點,而分支名和head就類似於兩個指標,head為指向當前分支的指標,master則只想master分支最末端節點,add流程如下:

此圖表示存在兩個分支,分別為master和branch,當前在master分支上,branch建立於第二次提交之後,並在branch分支上進行了一次提交。

git安裝完成之後,我們會在專案檔案目錄下初始化乙個git倉庫來使用git管理專案。使用命令git init來初始化乙個git倉庫,執行成功後會看到當前目錄下多了乙個.git檔案,說明倉庫初始化成功。

git針對本地倉庫常用主要有以下操作:

命  令

作  用

git commit -m"提交描述"

將快取區內容提交到版本庫中,多次add可對應一次commit操作

git status

檢視工作區與版本庫檔案變動情況

git diff

檢視工作區與版本庫檔案不同的地方,通常用+、-符號標識檔案變動情況

git log

檢視git日誌,顯示所有提交過的版本資訊

git reflog

檢視所有分支的所有操作記錄,與git log不同點就在於能檢視所有分支的所有記錄

git reset --hard commitid/head^

版本控制,回滾操作,可檢視git log獲取commitid來回退到任意提交版本,也可使用head^、head^^回退上一版本和上上一版本,或者head~n表示回退到第n版

git branch

顯示所有分支,*標識當前所在分支,加-a標識顯示包含遠端倉庫所有的分支

git checkout -b 分支名

建立並切換到分支,去掉-b表示直接切換分支,分支名後直接追節origin/遠端分支可建立遠端分支到本地

git rm 檔名

刪除檔案,執行刪除命令之後,再執行commit操作可刪除版本庫中的檔案

git merge branch

將branch分支合併到當前所在分支上

git tag 自定義版本號 cmmmitid

有時候為了開發方便,會自定義版本號,例如v0.1。我們可以使用git tag來為提交的版本標記上自定義的版本號,可使用命令git tag來檢視所有版本號

git add 檔名/.

新增工作區檔案到git倉庫的快取區

版本回退操作可模擬commit操作,每一次commit操作是在版本庫當前分支這一條鏈上新增乙個節點,而reset操作當然不會刪除乙個節點,如果刪除乙個節點我們回退有無之後在無辦法恢復。一次reset操作實際上伴隨的是一次指標的移動,比如當前分支為master,我們進行reset操作回退到上乙個版本,master指標會向前移動乙個節點,同時head也會跟隨master向前移動乙個節點,確保head永遠指向當前分支。如下圖所示:

分支合併類似,原理上同版本回退一致,都是指標的移動。如果在master分支上執行命令git merge dev,是將dev分支合併到master分支上。流程如下所示:

git通過版本庫來實現了分布式版本控制系統,但在開發中往往需要分工協作,git提供github和碼雲兩個平台來實現協作開發的目的。 

本地倉庫與遠端倉庫連線是通過ssh來連線的,所以我們需要在使用者主目錄下的.ssh中id_rsa.pub檔案中生成金鑰(is_rsa表示私鑰檔案,is_rsa.pub表示公鑰),如果這兩個檔案須執行命令ssh-keygen -t rsa -c "***@email.com"來生成金鑰(windows開啟bash執行此命令,郵箱為github賬戶郵箱),我們需要將公鑰key新增到github上,使github信任本機。git與本地是一對多的關係,也就是乙個github賬號可信任多台主機,新增多個公鑰,而一台主機同時只能與乙個github賬號相連。

github信任本機後,我們可以將本地倉庫與遠端建立的倉庫連線,使用命令git remote add origin [email protected]:actchen/workspaceofchen.git 來連線賬戶為actchen的遠端倉庫workspaceofchen。使用命令git push -u origin master 將本地分支內容推送到遠端分支master上,並且將本地master與遠端master繫結,繫結之後可去掉-u來推送本地分支到遠端分支。

git針對遠端倉庫常用操作:

命  令作  用

git remote add origin gitsshkey

與遠端倉庫關聯,gitsshkey為github提供的ssh,如[email protected]:actchen/workspaceofchen.git

git clone gitsshkey

與遠端倉庫關聯的另一種方式,相對remote add比較簡單,直接clone遠端倉庫到本地

git push -u origin 分支名

推送當前分支到遠端分支,並將當前分支與遠端分支繫結,第二次推送時則不需要再使用-u來繫結兩個分支

git衝突產生是由分支合併所導致的,之所以產生衝突是因為在不同分支上對同乙個檔案的修改都有提交,且檔案變動後的內容不同,導致兩個被合併分支不能merge。流程如下圖所示:

這是未接入遠端倉庫所產生的衝突,解決方法步驟如下:

git status 檢視衝突所產生檔案

vim 檔名 vim編輯檔案,手動解決衝突,選擇刪除衝突的內容

git add 檔名 在主合併分支上重新新增檔案

git commit -m「提交描述」 提交到主合併分支上

當我們使用遠端倉庫協作開發時,可能兩個人同時向乙個分支提交了對同乙個檔案的不同修改,此時也會產生衝突,產生衝突的原因與本地分支提交產生衝突的原因類似,只是遠端協作開發產生衝突原因是同一檔案同一遠端分支上的合併衝突。解決方法如下:

若當前分支未與遠端分支相連線,則需要連線本地分支和遠端分支: git branch --set-uostream-to=origin/dev dev;

連線成功之後,先將遠端分支的檔案pull下來:git pull;

pull成功後你會發現git會報出合併衝突,此時衝突已產生在本地,解決方式與未接入遠端倉庫時產生衝突的方法一樣

如果乙個專案有日誌輸出的話,每一次執行都會使日誌檔案或者是build.sh產生變動,從而導致了本地檔案與版本庫的檔案內容不同,這種變動是沒有必要重複推送到版本庫的,git提供在.git目錄下配置.gitignore檔案來配置需要被忽略的檔案。

SSH原理與應用

ssh是每一台linux電腦的標準配置。隨著linux裝置從電腦逐漸擴充套件到手機 外設和家用電器,ssh的使用範圍也越來越廣。不僅程式設計師離不開它,很多普通使用者也每天使用。雖然本文內容只涉及初級應用,較為簡單,但是需要讀者具備最基本的 shell知識 和了解 公鑰加密 的概念。如果你對它們不熟...

C STL nth element原理與應用

lz最近的考試中,某題可以通過呼叫nth element 來水過70 的資料 但是lz並不會啊 歷史總是驚人的相似 於是就有了這篇blog 在編寫 時,有時會有 在乙個無序表中快速得到第k小的元素 的需求 而直接排序 不能水過一些測試點 時間不能承受 於是stl的algorithm標頭檔案就給我們提...

MinHash原理與應用

jaccard index 舉例a,b 兩個集合 a b 根據jaccard index公式,a,b的相似度 s a,b a b a b 2 8 0.25 當然直接計算兩個集合的交集與並集,是很耗計算資源的,特別是在海量資料場景下不可行。假如,我們隨機從兩個集合中各挑選乙個元素s a s b 剛好這...