#28650·argo-cd

feat(repo-server): 为大型仓库添加可选的优化 ls-remote 模式

作者: kirillbilchenko创建于 2026年7月9日更新于 2026年9月16日
标签enhancementtriage/pending

总结

添加一个可选入的 repo-server 模式来优化大型寄存器的 Git 修订分辨率,方法是使用本地 Git 并尽可能缩小协议 v2 服务器侧 ref 。

示例设置:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? reposerver.git.lsremote. 优化后:"假"


优化默认被禁用,所以除非操作员允许,否则现有行为不会改变.

相关讨论:https://GitHub.com/argoproj/argo-cd/pul/26429#讨论 r3542404499

动机

在大型单体中,`git Is-remote'可以刊登数十万份参考书。 包括许多正常的Argo CD 应用程序没有使用的拉出请求回放。

Argo CD目前通过列出远程参考器解决修改问题。 对于大型寄存器,即使应用程序只针对分支、标记、语义标记范围、`HEAD'或承诺使用SHA,这种情况也可能是缓慢和资源密集型的。

使用本地的 Git 和 协议 v2 和 分支/ tag 缩放,

贝壳
git -c 协议. version=2 Is - 远程 -- -- heads -- -- tags <仓库>

在我们的环境下,这大约是100倍的快,因为协议v2服务器不需要广告不相干参考,如拉-请求参考.

提议

为优化修订解析度引入一个逐一禁用 repo-server 特性旗:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? reposerver.git.lsremote. 优化. 启用:"真"


等同的回服旗为:

贝壳
argocd-repo- server -- git- ls- 远程优化

启用时,Argo CD应通过一个共享的优化缓存条目解决分支、标记、语义标记范围以及“HEAD”问题。

对于每个缓存刷新,一个缓存锁定所有者应当:

  1. 利用下列手段获取分支和标签:

贝壳 git -c 协议. version=2 Is - 远程 -- -- heads -- -- tags <仓库>


2. 以有针对性的协议 v2 干燥取自临时光电存储库的方式解决 " HEAD " :

贝壳
git-c 协议.version=2 获取 -- dry-run -- porcelain -- no-tags -- s深入=1 -- filter=tree:0 <仓库> 总部

目标取回使用一组与HEAD'有关的参照前缀。 干-跑 ' 防止 Git从更新当地参考文献,但它仍然谈判和转移一包. -深入=1' 限制取来的历史,而-过滤=树:0'则在服务器支持部分克隆过滤时省去树和斑点。 如果过滤是不支持的,Git可能会传输完整的尖端树.

两种结果应一起存储在同一缓存条目中. 同时提出的请求应共享此缓存填充,每刷新一次生成一个分支/tag查询和一个 " HEAD " 查询,而不是每个呼叫者的额外 " HEAD " 查询。 快取点击不应提出远程请求 。

充分承诺的SHA应继续在没有网络请求的情况下解决.

现有行为仍应是默认行为。 如果其中任一优化的本地 Git 查询失败, Argo CD 应该使用当前 go- git 解析器作为最后倒计时 。

不支持完全限定的命名空间, 如 . . . . . . .

内容来源: argoproj/argo-cd