作業原理 / 流程:

1:git init初始化
主要目錄說明
objects-存盤物件的目錄,本地倉庫,git中物件分為三種:commit物件,tree物件(多叉樹),blob物件;檔案都是blob物件,二進制存盤;
Refs-存盤指向branch的最近一次commit物件的指標,也就是commit物件的sha-1值(就是hash值,sha-1是一種散列演算法);
HEAD檔案-該檔案表示當前本地簽出的分支;
Index檔案-存盤緩沖區(GitExtensions中的stage)的內容,內容包括它指向的檔案的時間戳、檔案名、sha1值等;(git三大區域:作業區,緩沖區,歷史記錄區)
2:git add * 指定檔案寫入快取區,生成Git物件
在objects目錄創建目錄和檔案
git是一套內容尋址系統,它是怎樣尋址的呢?
Git從核心上來看不過是簡單地存盤鍵值對(key-value)(hashmap),大概結構如下:
Key=sha-1(file header + file content)
Value=https://www.cnblogs.com/sun-null/p/壓縮(file content)
Key是一個40位字符的校驗和,前2位作為子目錄,后38位作為檔案名保存在子目錄下,

3:git cat-file -t 58c9 查看object的型別
其中58是目錄,C9是檔案名前兩位(58c9也可替換為key(目錄+檔案名)), 此時回傳blob
4:git cat-file -p 58c9 查看檔案內容
回傳檔案內容資訊,不包括檔案名等其他資訊
5:git commit -m用于提交暫存區的檔案;git commit -am用于提交跟蹤過的檔案
git commit -am提交已跟蹤過本地修改未執行add進入快取區的檔案=git add +git commit -m合并執行
其中已跟蹤并修改的檔案產生新的object
提交后Git倉庫里面object的型別發生變化,增加了其它目錄(tree commit兩種型別)可用第3點執行新的目錄和檔案,一個是commit,一個是tree
git cat-file -p 4caa查看tree型別的檔案資訊,從它儲存的內容來看可以發現它儲存了一個目錄結構(類似于檔案夾),以及每一個檔案(或者子檔案夾)的權限、型別、對應的身份證(SHA1值)、以及檔案名,

此時的Git倉庫關系是tree-blob結構

commit型別資訊,它儲存的是一個提交的資訊,包括對應目錄結構的快照tree的哈希值,上一個提交的哈希值

可以理解為commit是一次提交的根節點

git add 在暫存區索引Index建立與blob object的鏈接關系
git commit 根據索引區的鏈接資訊創建commit-tree-blob的新鏈接關系,
同時將版本指標指向新的鏈接關系,在commit記錄上一版本的key
6:分支資訊儲存-.git/refs/heads/master檔案存盤最新commit的key地址

7:Git的三個磁區(作業目錄、Index 索引區域、Git倉庫)
作業區:就是你在電腦里能看到的目錄,
版本庫:作業區有一個隱藏目錄.git,這個不算作業區,而是Git的版本庫,由Git object記錄著每一次提交的快照,以及鏈式結構記錄的提交變更歷史,
暫存區:一般存放在 “.git目錄下” 下的index檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index)這里面的代碼會在下一次commit被提交到Git倉庫,,


常用命令:
git log命令顯示從最近到最遠的顯示日志
git reset --hard HEAD^ 回退到上一個版本,如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推,那如果要回退到前100個版本的話,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset --hard HEAD~100 即可
git reflog 查看提交記錄版本號
git reset --hard 版本號退到指定版本
git checkout -- 檔案名 把在作業區中的檔案做的修改全部撤銷(如果已commit則退回最后一個版本,如果add則從快取區獲取)
查看分支:git branch
創建分支:git branch name
切換分支:git checkout name
創建+切換分支:git checkout –b name
合并某分支到當前分支:git merge name
洗掉分支:git branch –d name
git本地創建多個分支互不干擾
https://www.cnblogs.com/BonnieWss/p/10711835.html
參考資料
https://mp.weixin.qq.com/s/UQKrAR3zsdTRz8nFiLk2uQ
https://blog.csdn.net/Miracle_Yan/article/details/80224839
https://mp.weixin.qq.com/s/f1nQvj6tX4asH4l3uer6mw
https://mp.weixin.qq.com/s/IDChhMK_BR1dUJemOnwv9Q
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21110.html
標籤:其他
上一篇:MetaWebLog API — 一個多平臺文章同步的思路
下一篇:K8S ? K3S !
