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