之前我分享过关于 gitlab 背后的一些小知识:https://speakerdeck.com/saito/how-gitlab-works
其中提到了 backend 部分如何实现。并且列出了 gitolite/gitsis, patch sshd, replace sshd 三种不同的实现举例..
在即将发布的 gitlab v5.0 系列,gitlab 将完全移除对于 gitolite 的依赖。这个问题其实很早以前我们就讨论过。( Thread 是从下往上的顺序...
当时的讨论最终我贡献了 gitlab 中 HTTP protocol 系列的访问,而 gitolite 没有被最终移除..
gitolite 与 gitlab 的适配问题其实是导致很多人安装困难的主要原因,我当时提出的解决方案是 HTTP Only. 不过这个也不是一个完美的解决方案。终于在 5.0 移除了这个祸害..
简单介绍一下 gitolite 与 gitlab-shell 的实现异同:
首先他们都是 SSH-magic-command 的忠实信徒 ( 名词解释参考 slide. gitolite 最终将 command 导向了自己的 auth 程序。而 gitlab-shell 则用 gitlab 的 HTTPS API 去认证。
gitolite 有自己的认证体系,所以之前与 gitlab 的结合需要冗余一份数据在 gitolite 里面,而异构系统之前的状态同步是"世界难题"... 所以经常会需要同步状态.. 而 gitlab-shell 则利用 mysql 内部的所有 Repo 认证信息来做认证,现在 HTTPS 与 SSH 的认证被统一在 Ruby 程序中了。
gitolite 自身的配置文件是利用 git 管理的,而面对较大数据量的文件。性能极差... gitlab-shell 保守提高了 10x 的性能。
其实这次 gitlab-shell 的调整也是因为 gitlab.com 本身在 randx 加入后,网站本身也在不断扩容。碰到了这样的性能问题,平时运维也出现了麻烦。所以才会做出这样的变化..
随着 gitlab.com 越做越大。肯定会有更多的新东西出来..