Git基本原理-hash算法
一、哈希
??哈希是一個(gè)系列的加密算法,各個(gè)不同的哈希算法雖然加密強(qiáng)度不同,但是有以下幾個(gè)共同點(diǎn):
??①不管輸入數(shù)據(jù)的數(shù)據(jù)量有多大,使用同一個(gè)哈希算法,得到的加密結(jié)果長(zhǎng)度固定
??②哈希算法確定,輸入數(shù)據(jù)確定,輸出結(jié)果保證不變
??③哈希算法確定,輸入數(shù)據(jù)有變化,輸出結(jié)果一定有變化,而且通常變化很大
??④哈希算法不可逆
??⑤哈希算法中不區(qū)分英文大小寫
??哈希算法有很多種,如:MD5、SHA-1等。Git 底層采用的是 SHA-1 ,因?yàn)楣K惴梢员挥脕眚?yàn)證文件,Git 就是靠這種機(jī)制來從根本上保證數(shù)據(jù)完整性的
二、Git保存版本的機(jī)制
?1、集中式版本控制工具(如SVN)的文件管理機(jī)制:以文件變更列表的方式存儲(chǔ)信息。這類系統(tǒng)將它們保存的信息看作是一組基本文件(對(duì)應(yīng)下圖的Version1)和每個(gè)文件隨時(shí)間逐步累積的差異(對(duì)應(yīng)下圖的其他Version),在文件管理的時(shí)候只保存當(dāng)前版本相對(duì)于上一個(gè)版本的差異,這是一種增量式的版本控制
?2、Git 的文件管理機(jī)制:Git 把數(shù)據(jù)看作是小型文件系統(tǒng)的一組快照。每次提交更新時(shí) Git 都會(huì)對(duì)當(dāng)前的全部文件制作一個(gè)快照并保存這個(gè)快照的索引。為了高效,如果文件沒有修改,Git 不再重新存儲(chǔ)該文件,而是只保留一個(gè)鏈接指向之前存儲(chǔ)的文件。所以 Git 的工作方式可以稱之為快照流。下圖中Version2及其之后的實(shí)線框中的文件表示該版本的該文件相較于上個(gè)版本有變動(dòng),虛線框中的文件表示該版本的該文件相較于上一版本沒有變動(dòng)(只保存上一個(gè)版本的指針,而無需保存文件),這樣根據(jù)當(dāng)前版本的文件和指向上一版本的指針就可以找到該版本的所有文件的狀態(tài)
?Git 的提交對(duì)象:
?提交對(duì)象及其父對(duì)象形成的鏈條:
三、Git的分支管理機(jī)制(依賴于指針的變化)
?1、分支的創(chuàng)建:創(chuàng)建一個(gè)指向HEAD當(dāng)前指向的分支的當(dāng)前版本的指針
??說明:此時(shí)HEAD指向master分支的f30ab版本,那么新創(chuàng)建的testing分支的指針也會(huì)指向master分支的f30ab版本,實(shí)際上是創(chuàng)建的分支的指針會(huì)指向HEAD指針指向的分支所在的版本
?2、分支的切換:僅僅是改變HEAD指針的指向
??說明:切換分支時(shí),僅僅是切換一下HEAD指針的指向,從原分支指向想切換的分支
?3、版本的提交
??說明:若此時(shí)在testing分支上提交了版本,則只會(huì)使該分支的指針向后移動(dòng),不會(huì)影響其他分支,如上圖所示,其他分支的指針指向并沒有發(fā)生變化
?4、沖突的產(chǎn)生
??說明:在testing分支修改后,再將HEAD切換至master,然后在master上修改相同的文件,然后再master分支上提交,就會(huì)形成下面的局面:這時(shí)就有可能產(chǎn)生沖突,這合并版本的時(shí)候就需要解決沖突
5、和SVN的比較
??SVN在創(chuàng)建分支的時(shí)候是將所有文件復(fù)制一份,而git僅僅是創(chuàng)建一個(gè)指向當(dāng)前版本的指針,因此效率很高;Git中分支之間的切換僅僅是HEAD指針的變化,效率也很高;
??綜上:Git的操作很依賴于HEAD指針的變化。
原文:https://blog.csdn.net/rubulai/article/details/84563106
總結(jié)
以上是生活随笔為你收集整理的Git基本原理-hash算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: mips和mipsel区别
- 下一篇: 长沙岳麓山爆火 被游客们踩矮了5米?地图
