伴随着 GitOps 的盛行, Git 本身的影响力也在逐渐增大。从最开始只是为了管理 linux kernel, 到支撑起了 Github 这个最大的软件社区,Git 本身的应用范畴早已超出了 vcs 本身,我们还用它来存储配置文件,文档,制作电子书,维护 blog (由 Github 等平台展示)等等。在 GitOps 的范畴内,它更是成为了 the single source of truth

但 Git 最初的设计目标只是针对于 linux source code, 大量的小文件,而伴随着 git 应用范围的增多,明个明显的问题便显现出来

  • 大文件的管理:大文件通常都是难以 diff 的二进制文件,跟 git 本身的设计理念完全背道而驰
  • 大仓库的管理: 像 Google 的 Single Repo 以及微软的 windows 等巨型仓库,在使用 git 时都都会遇到非常多的性能问题。

对于前者来讲,目前的主流的解决方案都是 LFS, 主流的托管平台都支持。但在 GitOps 的大前提下,这个问题仍然算是未解决,因为在企业场景下又多了一个 Git 大文件管理的 dashboard, 而 GitOps 得了理念是为了减少 dashboard, 将所有的一切都统一起来。 一个可能的选项是用Cloud Native Artifact Registries的理念,用distribution 作为 LFS Server。

大仓库的管理微软的贡献比较显著些。像 Windows 这样的巨型项目,他们必须提前做很多改善才能把 Windows的代码放到一个仓库里。最终的实现原理跟 Google 类似: 与普通的 Git 仓库不同,他们使用一个 virtual filesystem 来作为底层存储,当用户使用 git 时,只有那些被访问的文件才会被实时从 Server pull 下来。这种方式带来的一个附带好处是也解决了大文件的管理问题。

期待 GitOps + CNAR + DevOps 完全成熟落地的那一天。

参考链接:

  1. Large files with Git: LFS and git-annex
  2. Git 大文件存储将帮助 Git 处理大型二进制文件
  3. Git LFS 的反思
  4. Scaling Git (and some back story)