」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Mini-git,了解檔案如何儲存在 Git 物件中

Mini-git,了解檔案如何儲存在 Git 物件中

發佈於2024-08-24
瀏覽:201

Mini-git, Understanding How Files Are Stored in Git Objects

昨天,我開始自己實現 Git 的核心功能之一——具體來說,檔案如何儲存、Git 物件是什麼以及哈希和壓縮的過程。我花了 4 個小時進行開發,在本文中,我將向您介紹我的思考過程和方法。

當您提交文件時會發生什麼?

當您在 Git 中提交文件時,會在幕後發生幾個重要步驟:

檔案壓縮:

使用 zlib 演算法壓縮檔案的內容以減少其大小。此壓縮內容儲存在 Git 物件資料庫中。

哈希計算:

從壓縮檔案內容產生唯一的 SHA-1 雜湊值。此雜湊用作 Git 物件資料庫中檔案的識別碼。

儲存對象:

目標檔案儲存在 .mygit/objects 目錄中,由雜湊值的前兩個字元組織。這種結構使得更容易有效地管理和檢索物件。
更新提交資訊:

示範檔案如何儲存在git中。
我已經實現了提交功能,考慮了一個文件

  1. 對於每個文件,我都計算了哈希值
  2. 在物件資料夾內,建立新資料夾,其名稱等於雜湊的前兩個字元。
  3. 並在該資料夾內建立一個文件,以剩餘的雜湊值作為名稱。 (該檔案儲存提交檔案的壓縮格式)
  4. 透過比較檔案新計算的雜湊值和上次計算的雜湊值偵測到變更

檢測變化

我根據自己的方法實作了這個演算法,但是 Git 對這些操作使用了更有效率的演算法。

  1. 從oldContent和newContent中提取行數組
  2. 創建了一個 Map 將行儲存為鍵,索引儲存為值
  3. 創建了兩個新數組來儲存 oldContent 和 newContent 中公共行的索引 4.例如: OldCommonarray = [0 , 3] 那麼刪除的行將是 [1,2]

GitHub 儲存庫
領英

非常感謝您抽出時間。

版本聲明 本文轉載於:https://dev.to/keerthivardhan1/mini-git-understanding-how-files-are-stored-in-git-objects-5bfb?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3