面試官:說(shuō)說(shuō)你對(duì)Git的理解?
本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰 。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。
一、是什么
git,是一個(gè)分布式版本控制軟件,最初目的是為更好地管理Linux內(nèi)核開(kāi)發(fā)而設(shè)計(jì)
分布式版本控制系統(tǒng)的客戶(hù)端并不只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整地鏡像下來(lái)。這么一來(lái),任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個(gè)鏡像出來(lái)的本地倉(cāng)庫(kù)恢復(fù)
項(xiàng)目開(kāi)始,只有一個(gè)原始版?zhèn)}庫(kù),別的機(jī)器可以clone這個(gè)原始版本庫(kù),那么所有clone的機(jī)器,它們的版本庫(kù)其實(shí)都是一樣的,并沒(méi)有主次之分
所以在實(shí)現(xiàn)團(tuán)隊(duì)協(xié)作的時(shí)候,只要有一臺(tái)電腦充當(dāng)服務(wù)器的角色,其他每個(gè)人都從這個(gè)“服務(wù)器”倉(cāng)庫(kù)clone一份到自己的電腦上,并且各自把各自的提交推送到服務(wù)器倉(cāng)庫(kù)里,也從服務(wù)器倉(cāng)庫(kù)中拉取別人的提交
github實(shí)際就可以充當(dāng)這個(gè)服務(wù)器角色,其是一個(gè)開(kāi)源協(xié)作社區(qū),提供Git倉(cāng)庫(kù)托管服務(wù),既可以讓別人參與你的開(kāi)源項(xiàng)目,也可以參與別人的開(kāi)源項(xiàng)目
二、工作原理
當(dāng)我們通過(guò)git init創(chuàng)建或者git clone一個(gè)項(xiàng)目的時(shí)候,項(xiàng)目目錄會(huì)隱藏一個(gè).git子目錄,其作用是用來(lái)跟蹤管理版本庫(kù)的
Git 中所有數(shù)據(jù)在存儲(chǔ)前都計(jì)算校驗(yàn)和,然后以校驗(yàn)和來(lái)引用,所以在我們修改或者刪除文件的時(shí)候,git能夠知道
Git用以計(jì)算校驗(yàn)和的機(jī)制叫做 SHA-1 散列(hash,哈希), 這是一個(gè)由 40 個(gè)十六進(jìn)制字符(0-9 和 a-f)組成字符串,基于 Git 中文件的內(nèi)容或目錄結(jié)構(gòu)計(jì)算出來(lái),如下:
- 24b9da6552252987aa493b52f8696cd6d3b00373
當(dāng)我們修改文件的時(shí)候,git就會(huì)修改文件的狀態(tài),可以通過(guò)git status進(jìn)行查詢(xún),狀態(tài)情況如下:
- 已修改(modified):表示修改了文件,但還沒(méi)保存到數(shù)據(jù)庫(kù)中。
- 已暫存(staged):表示對(duì)一個(gè)已修改文件的當(dāng)前版本做了標(biāo)記,使之包含在下次提交的快照中。
- 已提交(committed):表示數(shù)據(jù)已經(jīng)安全的保存在本地?cái)?shù)據(jù)庫(kù)中。
文件狀態(tài)對(duì)應(yīng)的,不同狀態(tài)的文件在Git中處于不同的工作區(qū)域,主要分成了四部分:
- 工作區(qū):相當(dāng)于本地寫(xiě)代碼的區(qū)域,如 git clone 一個(gè)項(xiàng)目到本地,相當(dāng)于本地克隆了遠(yuǎn)程倉(cāng)庫(kù)項(xiàng)目的一個(gè)副本
- 暫存區(qū):暫存區(qū)是一個(gè)文件,保存了下次將提交的文件列表信息,一般在 Git 倉(cāng)庫(kù)目錄中
- 本地倉(cāng)庫(kù):提交更新,找到暫存區(qū)域的文件,將快照永久性存儲(chǔ)到 Git 本地倉(cāng)庫(kù)
- 遠(yuǎn)程倉(cāng)庫(kù):遠(yuǎn)程的倉(cāng)庫(kù),如 github
三、命令
從上圖可以看到,git日常簡(jiǎn)單的使用就只有上圖6個(gè)命令:
- add
- commit
- push
- pull
- clone
- checkout
但實(shí)際上還有很多命令,如果想要熟練使用,還有60個(gè)多命令,通過(guò)這些命令的配合使用,能夠提高個(gè)人工作效率和團(tuán)隊(duì)協(xié)助能力
參考文獻(xiàn)
https://zh.wikipedia.org/wiki/Git
https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html