Git 2.51 帶來關鍵效能改進和新功能

git 2.51

經過兩個月的緊張工作, Git 推出 Git 2.51 版本, 更新 它匯集了 506 項變更,共有 91 名開發人員參與, 其中21人為首次捐款。

此版本引入了旨在提高效能和簡化儲存庫管理的改進,包括對 git-push 和 git-fetch 的效能最佳化,以及向新的 3.x 分支邁進的幾項變更。

Git 2.51關鍵新功能

Git 2.51 的一大亮點是 最佳化 git push 和 git fetch 指令 在具有大量參考文獻的儲存庫中。 這次改進的關鍵在於批量更新它在一次交易中處理多個鏈接,而不是單獨處理。

由於這一優化, reftable 後端現在比傳統檔案後端表現更好。在包含多達 10 個引用的儲存庫測試中,git fetch 效能對於 reftable 提高了 000 倍,對於檔案提高了 22 倍,而 git push 效能分別提高了 1.25 倍和 18 倍。

另一項重要創新是引入所謂的 cruft 包, 用於儲存未連結到分支或標籤的無法存取的物件。這些物件以前分散在 現在可以單獨包裝管理s,這使得它們更易於控制並減少了多包索引(MIDX)的大小。

隨著 新的 repack.MIDXMustContainCruft 設置,Git 避免在主索引中包含這些對象在 GitHub 上的測試中,此配置將索引大小減少了 38%,寫入速度提高了 35%,讀取速度提高了 5%。

物件包裝的新方法

El git pack-objects 指令包含 –path-walk 選項, 引入了一種創新方法 重新組織包裝文件。 Git 現在不再根據對象的雜湊值來處理對象,而是根據它們的檔案路徑進行迭代,將共享相同位置的物件打包在一起。這種方法無需預先對物件進行排序,從而產生更小、更有效率的打包檔案。

也有這個版本 用於交換使用 Git Stash 建立的工作樹狀態和索引的新格式已標準化。。現在可以像分支或標籤一樣匯出和匯入存儲,從而更容易將狀態從一個系統移動到另一個系統。

例如:

git stash 匯出 --to-ref refs/stashes/mi-stash git push origin refs/stashes/mi-stash git fetch origin '+refs/stashes/*:refs/stashes/*' git stash 導入 refs/stashes/mi-stash

經典指令的改進

VARIOS Git 指令已收到相關更新:

  • git cat-file 現在報告遺失的物件和子模組,顯示識別碼而不是僅僅標記「遺失」。
  • git log 受益於布隆過濾器優化,加快了使用多個檔案路徑的搜尋。
  • git switch 和 git restore 命令自 2019 年以來一直被視為實驗性的,最終穩定下來,成為 git checkout 的現代替代品。
  • git whatchanged 指令(相當於 git log –raw)已被棄用並將在 Git 3.0 中刪除。
  • git for-each-ref 接收 –start-after 選項,該選項與 –count 一起允許對輸出進行分頁。
  • git merge 和 git pull 現在包含 –compact-summary 選項,它提供了更簡潔的摘要格式。

C99 支持和新的貢獻規則

Git 不斷調整其程式碼以適應 C9 標準的特性9. 儘管自 2021 年起就需要相容的編譯器,但開發人員仍在謹慎行事,以保持與僅部分實現的編譯器的兼容性。

此外,捐款政策也進行了重大變化: 現在可以用假名提交補丁,這項決定符合 Linux 核心的規則,旨在為貢獻者提供更大的靈活性。

展望 Git 3.0

El 開發團隊也將路線圖更新至 Git 3.0。其中兩個關鍵變化特別突出:預設使用 SHA-256 作為物件標識符,並採用 reftable 格式儲存分支和標籤引用。這些改進旨在提高日益龐大和複雜的儲存庫的安全性和效率。

來源: https://lore.kernel.org