g-git 相关命令 及其 基本原理探索 (一)
文章目錄
- git 最小配置作用域
- git 創建本地倉庫
- git log 查看版本演進
- .git 目錄
- refs目錄
- objects
- git 三種對象類型詳解 (commit ,tree,blob)
因為工作需求,接下來將從git的使用到其內部工作原理,來避免代碼提交或者review或者版本管理上的一些尷尬,同時也來學習一下這個優秀的分布式版本管理工具的實現,理解事務在分布式里面的原子性思想。
git 最小配置作用域
git 創建本地倉庫
git log 查看版本演進
.git 目錄
單獨介紹一下如下兩個重要的目錄:
refs目錄
refs目錄下有兩個目錄:heads和tags
- heads 保存的是獨立的分支空間,且之間互不影響。
- tags表示里程碑,項目開發到一定程度之后可以打上對應的tags作為一個階段的標記
heads目錄下的 分支內容保存的是一個個代表唯一分支的名稱的四十位的hash值
通過git branch -av看到的分支信息 看到的分支名稱后面的hash值比較短,這里是只要這個hash值能夠唯一代表當前的分支即可顯示,所以短一點也是能夠唯一性表示當前分支的。
tags的目錄下也保存著之前打過的tags,為每一個tags生成一個唯一的對象,且用40位的hash值進行標識
通過如下兩個命令可以查看對應hash值代表的對象類型和操作內容
git cat-file -t hash_value查看對象類型git cat-file -p hash_value查看對象內容
objects
目錄內容如下:
pack 是在多個松散目錄較多的情況下對其進行壓縮,將壓縮后的數據保存到當前目錄
其他松散目錄來看一下
cd 14 && ls -al
git cat-file -t 142a4f1706858e07b1a29c591d48ebc3e562bc45 -t來查看類型 以及-p 查看具體的內容
這里需要注意hash數值的前兩位一定是目錄名稱,后面是實際的hash數值
類型是tree,且發現內容是一個blob類型的對象,其保存的是我們當前git目錄下的唯一一個文件test_file,繼續查看其類型及內容
git 三種對象類型詳解 (commit ,tree,blob)
目前通過對git目錄的訪問,可以看到git擁有三種主要的核心對象:commit(heads目錄),tree(objects目錄),blob(實際的數據,保存在tree對象的指向中)
接下來看看三種對象類型之間的關系
-
commit類型就是我們使用
git commit提交之后創建的數據對象,使用git cat-file -p b360e56后面的字符串是本次commit下的內容信息,它是按照樹形存儲的。主要是里面的tree類型的文件夾。
內容如下:root@root heads % git cat-file -p b360e56b39a5d605918816ea4dc07d61e93b12f8 tree 142a4f1706858e07b1a29c591d48ebc3e562bc45 parent 30a71408576f421909d05cdd424703b8866dd943 author BaronStack <2689496754@qq.com> 1593260841 +0800 committer BaronStack <2689496754@qq.com> 1593260841 +0800 -
tree 類型就是git目錄的管理結構,也可以當作文件夾來看。通過tree的hash值我們能夠訪問到存儲與其文件夾內部的子目錄以及對應的子文件。
-
blob類型 是真正存放數據的內容,只要數據的內容一樣,git這里只會創建一個blob對象。所以,這里也保證了blob的版本控制和不同版本的合并功能是正常的。
總結
以上是生活随笔為你收集整理的g-git 相关命令 及其 基本原理探索 (一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求帝恩帅气妆
- 下一篇: 上海欢乐谷生日票以身份证那天为准吗