git的底層原理

git的底層原理

三段話總結git,

1. 工作原理:git管理是一個DAG有向無環圖,HEAD指針指向branch或直接指向commit,branch指向commit,commit指向tree,tree指向別的tree或直接指向blob。

2. git所管理的一個目錄,幾乎所有相關信息都寫在.git目錄下的子目錄或子文件中。

3. 工作區就是編輯文件和目錄的地方,也就是除過.git目錄之外的,用戶可以顯示編輯的project目錄的文件數據。暫存區(stage)就是.git/index二進制文件和.git/object/目錄下新增加的blob對象,.git/index二進制文件里面保存的是git跟蹤的所有文件的hash值和文件名,包括之前跟蹤的,本次沒有修改過的,也包括本次git add的文件。如果沒有git add,即使工作區有文件新增或修改了,.git/index二進制文件也不會記錄這些,.git/object/目錄下不會新增blob對象。那么git add的目的就是讓工作區發生的修改被記錄到.git/index二進制文件中,而且同時會在.git/object/目錄下產生一個新的存放blob對象的目錄,這個blob在.git/object/目錄下的一個新目錄的文件中,這個文件的名稱是git ls-files --stage看到的hash值,應該是sha1算法算出來的,這個文件里面的內容是二進制數據,用vim打開不能text顯示。然后git commit的時候會產生新的tree和commit對象,HEAD指針會移動,HEAD指針的記錄,和commit的log日志等。所以暫存區可能更應該理解為.git/index文件和.git/object/下的blob對象的存儲,而不僅僅是.git/index文件的更新。

4. 應該可以這樣說,git幾乎所有的配置以及指針、索引等信息都在./git目錄下,git命令調出來的信息都來自于這里面的文件。所以搞清楚git,熟悉git的底層原理和各種操作。應該都可以以這些文件為基礎,這個就有點符合其作者Linus的風格了,和Linux一樣,一切皆文件,越簡單越好,不過度設計,脾氣暴躁,簡單直接,以C語言為基礎,軟件風格也是C語言的感覺。

上面這個圖,要從右向左看

上面這個圖,要從左向右看

git的每次commit都會產生一個校驗和,這個校驗和是通過SHA-1算法算的(Secure Hash Algorithm 1),SHA-1是一種加密散列函數,用于生成數據的唯一固定大小的哈希值。在Git中,這個哈希值用于標識對象(如commit、tree、blob等),保證了數據的完整性和版本的唯一性。

這里順便提一下幾個加密算法的情況

md5sum sha1sumsha256sumsha512sum

算出來的校驗和長度越來越長,也越來越安全。

話說回來,git每一次的commit都會產生一個hash值。這個值是唯一的,相當于保存了每一次提交的目錄樹結構和具體的文件的情況。就比如給一個項目目錄的所有情況打了一個快照。如果要切換到這個狀態,或者使用這個狀態,用hash值作為索引就能找到這個快照。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73162.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機網絡原理】選擇題+簡答題

文章目錄 選擇題網絡基礎IP網絡拓撲 OSI七層模型協議HDLCTCP/IP 交換技術網絡安全數字簽名 算法與策略 簡答題UDPTCP 選擇題 網絡基礎 下列域名中,屬于國際頂級域名的是() A. us B. tom C. edu D. int 下列關于光纖傳輸介質的敘述中錯誤的是…

Android數據加密方案

Android數據加密方案 前言 在移動應用開發中,數據安全是一個永恒的話題。Android應用中往往需要存儲和傳輸敏感數據,如用戶密碼、支付信息、個人隱私等。本文將深入介紹Android平臺上的數據加密方案,幫助開發者構建安全可靠的數據保護機制。 基礎知識 1. 加密算法分類 …

神聖的綫性代數速成例題13. 非齊次方程組解的性質、非齊次方程組解的討論

綫性空間的維數: 若綫性空間中存在一組綫性無關的矢量,使得中的任意矢量 都可以由綫性表示,則稱為綫性空間的維數,記作,稱為的一組基。 基與座標變換: 設和是維綫性空間的兩組基,且,…

github代理 | 快速clone項目

代理網址: https://ghproxy.com/ https://ghproxy.com/代理網址: https://ghproxy.com/ 比如需要克隆的項目git地址為:https://github.com/AUTOMATIC1111/stable-diffusion-webui.git git clone https://ghproxy.com/https://github.com/AUTO…

Kafka集成Debezium監聽postgresql變更

下載postgres的插件:https://debezium.io/documentation/reference/2.7/install.html 2.7版本支持postgresql12數據庫。 debezium-connector-postgres-2.7.4.Final-plugin.tar.gz 上傳插件并解壓 mkdir /usr/local/kafka/kafka_2.12-2.2.1/connector cd /usr/local…

『uniapp』簡單文本復制文字 富文本內容復制文字(詳細圖文注釋)

目錄 text組件錯誤代碼示例成功代碼總結 歡迎關注 『uniapp』 專欄,持續更新中 歡迎關注 『uniapp』 專欄,持續更新中 text組件 官方文檔可知app端用selectable可實現文本選中進而可復制,也就是說text標簽內部的文本就可以復制了 https://uniapp.dclou…

RestTemplate和RPC區別

RestTemplate是Spring框架中用于進行RESTful風格的HTTP請求的模板類,通常用于與外部服務進行通信。它基于HTTP協議,使用GET、POST、PUT、DELETE等HTTP方法來進行通信,傳輸的數據通常使用JSON或XML格式。它是一種基于資源的通信方式&#xff0…

算法模型從入門到起飛系列——背包問題(探索最大價值的掘金之旅)

文章目錄 前言一、背包問題溯源(動態規劃)1.1 動態規劃的概念1.2 動態規劃的基本步驟1.3 動態規劃的實際應用 二、背包問題2.1 背包問題衍生2.2 0-1背包2.2.1 0-1背包描述2.2.2 0-1背包圖解2.2.3 0-1背包代碼刨析 2.3 完全背包2.3.1 完全背包描述2.3.2 完…

Python實現爬蟲:天氣數據抓取(+折線圖)

一、基本架構 1、URL管理器:爬蟲的調度中樞 核心職責 功能說明URL去重防止重復抓取URL優先級管理控制抓取順序(廣度優先/深度優先)斷點續爬支持持久化存儲抓取狀態分布式協同多節點共享URL隊列 2、網頁下載器:數據獲取的引擎 功…

DFS刷題

洛谷P2089烤雞 #include<iostream> using namespace std; const int N 20, M 1000010; int ans[N]; int dp[M][N]; int n, count; void dfs(int x, int sum){if(sum > n)return;if(x > 10){if(sum n){count;for(int i 1; i < n; i)dp[count][i] ans[i];}r…

《Operating System Concepts》閱讀筆記:p460-p4470

《Operating System Concepts》學習第 36 天&#xff0c;p460-p4470 總結&#xff0c;總計 11 頁。 一、技術總結 無。 二、英語總結(生詞&#xff1a;3) 1.lifespan (1)lifespan: life span(“the period of time that sth exists or happens”) c. 也寫作 life-span, …

stratis,容器podman

一、stratis 1.stratis可以實現動態的在線擴容&#xff0c;lvm雖然也可以實現在線擴容&#xff0c;但是是需要人為的手動擴容。 2.stratis不需要手動格式化&#xff0c;自動會創建文件系統&#xff08;默認是xfs&#xff09; 1. 安裝stratis軟件包 yum list | grep stratis…

音頻焦點 Android Audio Focus

Android 音頻焦點詳解 音頻焦點&#xff08;Audio Focus&#xff09;是 Android 系統用于協調多個應用同時訪問音頻輸出的機制。當多個應用需要播放音頻時&#xff0c;音頻焦點確保用戶聽到的內容不會混亂&#xff08;如多個音樂應用同時播放&#xff09;。以下從核心概念、使…

【用 Trace讀源碼】PlanAgent 執行流程

前提條件 在 Trae 中打開 OpenManus 工程&#xff0c;使用 build 模式&#xff0c;模型選擇 claude-sonnet-3.7 提示詞 分析 agent/planning.py 中 main 方法及相關類的執行流程&#xff0c;以流程圖的方式展示PlanningAgent 執行流程圖 以下流程圖展示了 PlanningAgent 類…

1、雙指針法

關于每個知識點的例題 可以自己看力扣標準題解。也可以在嗶哩嗶哩上看。想看我的&#xff0c;就到github 看 - 庫 &#xff0c;介紹里寫的算法講解那些&#xff0c;里面有知識點&#xff0c;有題庫。題庫&#xff0c;每天都發題&#xff0c;可能跟博客的進度不一樣。因為我上傳…

LangChain 基礎

一、LangChain 模塊和體系 LangChain 是一個用于開發由大型語言模型&#xff08;LLMs&#xff09;驅動的應用程序的框架。 官方文檔&#xff1a;https://python.langchain.com/docs/introduction/ LangChain 簡化了LLM應用程序生命周期的每個階段&#xff1a; 開發&#xf…

#echarts#折線圖#餅圖

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>折線圖</title> </head> <body><div id"app" style"width:100%;height:100%;"><div id"chart-c…

Parsing error: Unexpected token, expected “,“

今天在使用Trae AI 編程工具開發大文件切片上傳功能&#xff0c;使用的是VUE3,TS技術棧&#xff0c;開發完成運行時&#xff0c;編譯報錯&#xff08;Parsing error: Unexpected token, expected ","&#xff09;&#xff0c;讓AI自行修復此問題多次后還是沒有解決&a…

NLP高頻面試題(九)——大模型常見的幾種解碼方案

大模型常見的幾種解碼方案 在自然語言生成任務中&#xff0c;如何從模型生成的概率分布中選擇合適的詞匯&#xff0c;是影響文本質量的關鍵問題。常見的解碼方法包括貪心搜索&#xff08;Greedy Search&#xff09;、束搜索&#xff08;Beam Search&#xff09;、隨機采樣&…

農用車一鍵啟動工作原理

移動管家農用車一鍵啟動的工作原理與普通汽車類似&#xff0c;主要依賴于無線射頻識別技術&#xff08;RFID&#xff09;。以下是具體的工作步驟和原理&#xff1a; 智能鑰匙識別&#xff1a; 車主攜帶智能鑰匙靠近車輛時&#xff0c;鑰匙通過發射射頻信號與車輛進行交互。車輛…