Git概述

腦圖

Git.png

介紹

Git是一個分布式版本控制系統(tǒng),能夠使得身處不同物理位置的開發(fā)者緊密的協(xié)同開發(fā)一個軟件.也能夠控制開發(fā)者能夠查閱與修改的代碼權(quán)限.簡而言之,git是多人協(xié)同開發(fā)必不可少的工具,下面我來逐一介紹git的一些概念:


版本庫(repository)

版本庫是一個簡單的數(shù)據(jù)庫.提供版本庫自身與所有文件的副本.
它主要維護(hù)2種數(shù)據(jù)結(jié)構(gòu):對象庫與索引.

對象庫(object store)

對象庫包含三個部分:原子對象, 存儲系統(tǒng)與一個簡單的數(shù)據(jù)庫.

原子對象

原子對象是版本庫的基礎(chǔ)對象,分為四種類型:
塊(blob)
每一個文件的版本表示為塊,它只被目錄樹引用.


目錄樹(tree)
保存blob的標(biāo)識符,路徑名和一個目錄中所有文件的元數(shù)據(jù).
引用blob對象,每一次變化(比如新增了文件)都會產(chǎn)生一個新的樹,新樹包含著所有文件,舊樹則包含著除了新增文件文件外的其他文件.
目錄樹只會包含該目錄下的文件與子目錄的信息,不會包含子目錄下的文件及孫子目錄的信息.


提交(commit)
保存版本庫中每一次變化的元數(shù)據(jù),諸如作者,提交者等.每一個提交對象都指向一個目錄樹對象.


標(biāo)簽(tag)
標(biāo)簽分為輕量級標(biāo)簽與標(biāo)注
輕量級標(biāo)簽是一個提交對象的引用,通常被版本庫視為私有.
標(biāo)注則可以根據(jù)RFC4880來使用GnuPG密匙進(jìn)行數(shù)字簽名.


索引(index)

索引是臨時,動態(tài)的二進(jìn)制文件,描述整個版本庫的目錄結(jié)構(gòu).
不包含任何文件內(nèi)容,只追蹤你想要提交的那些內(nèi)容.
添加文件到索引的操作被稱為暫存.


工作目錄

文件所在目錄


內(nèi)容追蹤與存儲機(jī)制

只追蹤內(nèi)容

git只追蹤內(nèi)容,如果兩個文件的內(nèi)容完全一樣,就算名字不一樣,目錄結(jié)構(gòu)不一樣,git也只會保存其中一份,用以,并以這一份文件代指其他內(nèi)容一樣的文件.

對文件變化的處理

文件發(fā)生改變時,會計算新的SHA1值,然后將新的blob添加到對象庫中.

文件差異的存儲

第一次存儲時,會儲存全部文件.之后則只會存儲不同文件中有差異的那一部分,而不是又把文件再完整存儲一份.


文件分類

已追蹤(Tracked)

已在版本庫或已被暫存到索引中的文件.

被忽略(Ignored)

被索引忽視的文件

未追蹤(Untracked)

未被忽略且未被索引的文件


提交(commit)

絕對提交名

散列id

相對提交名

引用和符號引用:
.git/heads代表本地分支
.git/remotes代表遠(yuǎn)程分支


提交歷史記錄

提交圖: 使用gitk即可查看版本庫的DAG.


查找提交

查找錯誤提交
git bisect:該指令會讓用戶判斷哪些提交沒問題,哪些提交有問題,最后找出有問題的提交.
git blame: 獲取每一行是誰修改的和那一次提交做出了變更.


可達(dá)提交

把提交看成一棵樹,可達(dá)提交就是指從某一個節(jié)點(diǎn)開始,他的所有父節(jié)點(diǎn)及其父節(jié)點(diǎn)的兄弟節(jié)點(diǎn),都是可達(dá)提交的節(jié)點(diǎn).


合并

概要

要合并的分支必須位于同一個版本庫.
分支沖突時,git不解決沖突,并且會在索引中標(biāo)價為未合并(unmerged).
git merge的當(dāng)前分支是目標(biāo)分支.


沖突的合并

這里列舉幾條解決沖突的建議:

  1. 使用diff指令查看工作目錄與索引的差異,它會通過額外的+與-符號來表示相對于最終版本的來之余多個源的變化,方便找出沖突
  2. git status則是一個更好的選擇,相比diff會展示所有細(xì)節(jié),status只展示未合并與有沖突的文件.
  3. git log --merge --left-right -p 這個指令將會顯示2個提交之間的沖突
  4. 建議提交大型修改之后,修復(fù)沖突的復(fù)雜性.高頻率小型提交是更合適的實(shí)踐.

回滾

git reset --hard [<commit>]
這條指令會把工作目錄和索引還原到某一次提交.常用的git reset --hard HEAD^則會回退至當(dāng)前分支的上一個版本.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,201評論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 4,154評論 0 11
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,974評論 1 17
  • 爍兒聰慧又自強(qiáng), 考研錄進(jìn)好學(xué)堂。 如今要戴碩士帽, 黃家又添好兒郎。
    黃曉紅閱讀 257評論 0 1
  • 十一長假回去,我三姐把我外甥(大姐)接了過來,好久沒見的小外甥女(三姐)和外甥(大姐)又一次見了面,剛到一塊的第一...
    61dfb5aa5219閱讀 572評論 0 1

友情鏈接更多精彩內(nèi)容