首頁 >web前端 >js教程 >Mini-git,了解檔案如何儲存在 Git 物件中

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

WBOY
WBOY原創
2024-08-22 18:45:03326瀏覽

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 儲存庫
領英

非常感謝您抽出時間。

以上是Mini-git,了解檔案如何儲存在 Git 物件中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn