簡體   English   中英

Git 和大型 monorepos 上的稀疏結帳 - 隱藏稀疏結帳規范的不相關更改? (git-diff、git-log 等)

[英]Git and sparse-checkout on large monorepos - hiding irrelevant changes for a sparse-checkout specification? (git-diff, git-log, etc)

隨着 git 越來越多地被宣傳(和增強)以更好地支持非常大的存儲庫(所謂的“monorepos”),最近對稀疏簽出工作流程進行了重大改進(git-sparse-checkout 命令和部分克隆/承諾/--filter ),我很驚訝在處理提交歷史記錄時找不到利用稀疏簽出配置/規范的方法

我看到該主題已在之前的問題中部分提出:

唯一的答案提出了每個命令的路徑過濾器,但是如果不是不可能的話,將.git/info/sparse-checkout規范轉換為路徑過濾器通常是不平凡的。

git-diff 缺乏稀疏結賬支持似乎特別成問題,在大型 monorepo 上,由於所有其他團隊/區域的更新,兩個相當遠的版本之間的差異可能會被嚴重掩蓋,或者實際上無法訪問. 這既是性能問題,也是可讀性/可達性/可用性問題。

有誰知道是否可以在 diff 和其他工具中使用 sparse-checkout 配置,和/或這種可能性是否可行?

git-diff 缺乏稀疏結賬支持似乎特別成問題,在大型 monorepo 上,由於所有其他團隊/區域的更新,兩個相當遠的版本之間的差異可能會被嚴重掩蓋,或者實際上無法訪問.

第一個問題是性能問題,應該通過Git 2.34 中的稀疏索引來改進

可以想象,即使您在大型存儲庫的一個小角落工作,索引仍然必須跟蹤存儲庫的全部內容,而不僅僅是您正在工作的部分。

不幸的是,這種開銷加起來了:每次 Git 需要使用索引時,它都需要解析和寫出大量數據,這些數據不會影響您的存儲庫的稀疏檢出部分之外的部分。

通過添加啟用稀疏的索引,此版本中的情況發生了變化。

與以前版本的索引不同,此版本允許索引僅跟蹤您關心的存儲庫部分。
具體來說,它僅包含存儲庫的部分條目,這些條目要么位於稀疏簽出中,要么位於稀疏簽出與存儲庫的 rest 之間的邊界處。

折疊到稀疏索引 - https://github.blog/wp-content/uploads/2021/11/Fig-9-collapsing-to-sparse-index.png

三角形代表樹,方框代表斑點。

  • 左:非稀疏索引內容的表示。
  • 右:稀疏化索引。

這里的高級細節是索引格式現在可以理解特殊標記的目錄指示稀疏簽出的內容與未簽出的存儲庫部分之間的邊界。

所以git diff / log /... 現在應該只對您需要的稀疏數據(結帳索引)進行操作,而不是處理完整的索引。

來自Derrick Stolee的“ 使用 Git 的稀疏索引讓你的 monorepo 感覺很小”的更多詳細信息。


但第二個也是實際的問題是:

我可以運行“ git log ”(或git diff ,在任意提交范圍之間)以僅返回影響我的稀疏結帳錐的提交嗎?

您可以顯示文件夾的日志,並從那里僅列出從該日志中列出的提交之間的差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM