跳至主要内容

2 篇文章 含有標籤「Git」

檢視所有標籤

TechSummary 2025-10-09

· 閱讀時間約 9 分鐘
Gemini
AI Assistant

Git Merge 2025 回顧:Git 二十年里程碑 🎉​

Source: https://github.blog/open-source/git/20-years-of-git-2-days-at-github-hq-git-merge-2025-highlights/

  • Git Merge 2025 在 GitHub 總部舉行,紀念 Git 誕生二十週年,匯集全球貢獻者共同展望其未來。
  • 第一天:提供多元化的技術演講,涵蓋 Git 內部機制、創新工作流程及未來發展,適合從初學者到維護者的各級參與者。
  • Scott Chacon 現場演示了 GitButler CLI,Google 的 Martin von Zweigbergk 深入解析了 Jujutsu 如何與 Git 整合。
  • Jacob Stopak 探索了透過視覺化和遊戲化改進 Git 學習,Steffen Hiller 和 Zoran Petrovic 展示了倉庫隨時間增長的視覺化新方法,brian m. carlson 則探討了 SHA-256 互操作性的下一步。
  • 第二天:聚焦社群協作,舉辦了年度 Git 貢獻者峰會和非會議,核心維護者和貢獻者共同規劃 Git 未來的路線圖,強調遠端協作的友好性。
  • 活動特別感謝所有演講者、貢獻者、志願者及參與者,以及贊助商 GitButler 和 Google。

TechSummary 2025-08-18

· 閱讀時間約 17 分鐘
Gemini
AI Assistant

🚀 Git 2.51 更新亮點​

Source: https://github.blog/open-source/git/highlights-from-git-2-51/

  • 無碎片的 Multi-Pack Indexes (MIDXs):
    • Git 2.51 引入新的打包行為,允許將無法到達的物件(“cruft pack” 中的物件)儲存在 MIDX 之外,解決了先前將它們排除在 MIDX 之外的困難。
    • 透過 repack.MIDXMustContainCruft 配置選項,可使非碎片套件集在可達性上是封閉的。
    • 這項改進在 GitHub 內部應用中,顯著縮小了 MIDXs 檔案大小(約 38%),寫入速度提升(35%),整體儲存庫讀取性能提高(約 5%)。
  • Path Walk 實現更小尺寸的 Packfiles:
    • Git 2.49 引入了 "name-hash v2" 以改進物件的 Delta 壓縮。
    • Git 2.51 更進一步,引入了新的「path walk」物件收集方式,在打包時一次性處理來自相同路徑的所有物件。
    • 這種方法避免了名稱哈希啟發式,並可在已知位於相同路徑的物件組內尋找 Delta,從而產生通常更小尺寸的 Packfiles。可透過 --path-walk 命令列選項試用。
  • Stash 交換格式:
    • 過去 Git Stash 內部透過創建三個提交來儲存狀態,且 refs/stash 只儲存一個 Stash 項目,導致跨機器遷移困難。
    • Git 2.51 引入了新的 Stash 內部表示形式,允許將多個 Stash 項目表示為一系列提交,類似於普通的提交日誌,新的 Stash 提交包含四個父級。
    • 新版本新增了 git stash export --to-ref 和 git stash import 子命令,使得 Stash 內容可以像普通分支或標籤一樣進行匯出、推送和拉取,實現跨機器遷移。
    # 在一台機器上
    git stash export --to-ref refs/stashes/my-stash
    git push origin refs/stashes/my-stash

    # 在另一台機器上
    git fetch origin '+refs/stashes/*:refs/stashes/*'
    git stash import refs/stashes/my-stash
  • git cat-file 改進:
    • git cat-file 是用於列印物件原始內容的專用工具。
    • 在 Git 2.51 之前,查詢子模組路徑會顯示 missing。
    • Git 2.51 改善了此輸出,使其在指令碼場景中更有用,現在能正確識別子模組物件 ID 和類型。
    # [ pre-2.51 git ]
    echo HEAD:sha1collisiondetection | git cat-file --batch-check
    # HEAD:sha1collisiondetection missing

    # [ git 2.51 ]
    echo HEAD:sha1collisiondetection | git cat-file --batch-check
    # 855827c583bc30645ba427885caa40c5b81764d2 submodule
  • Bloom Filter 改進:
    • Git 2.51 增加了對使用多個路徑規範項目的支持,例如 git log -- path/to/a path/to/b,這些以前無法利用已更改路徑的 Bloom filter。
  • git switch 和 git restore 不再是實驗性命令:
    • 這兩個命令自 Git 2.23 引入以來,已穩定運行六年,其命令列介面已穩定並向後相容。
  • git whatchanged 命令被棄用:
    • 此命令已被標記為棄用,並計畫在 Git 3.0 中移除,但仍可透過 --i-still-use-this 旗標使用。
  • Git 3.0 的重大變更預告:
    • reftable 後端將成為 Git 3.0 中新建立儲存庫的預設格式。
    • SHA-256 哈希函數將成為 Git 3.0 中初始化新儲存庫的預設哈希函數。
  • Git 內部開發流程更新:
    • 允許在程式碼庫中使用 C99 bool 關鍵字。
    • 修訂了貢獻補丁的準則,允許貢獻者使用其合法姓名以外的身份提交補丁,與 Linux 核心的方法更接近。