2017年12月19日

Git远程库迁移

作者 非鱼

要整体迁移Git服务器,之前是基于Bonobo的C# MVC GitServer的,文件存储用的是UCloud的云硬盘,当时主要是考虑数据存储安全性的问题,但是随着项目和提交版本越来越多,Git目录下的文件超过了200万个,总容量才50G不到,结果就导致拉项目速度越来越慢,一来是云硬盘的零散小文件读取性能本身就有问题,二来是Windows处理过大的分区表本身也有问题。之前就遇到过整个分区表崩溃的事情,导致文件再也恢复不出来。于是准备整一个新的Git服务器。

测试了gitbucket和gitprep两个项目,gitprep是基于Perl开发的,安装完直接运行就自带Web服务器,安装过程也是用自己的脚本一键完成,界面完全克隆了Github,看上去很舒服。但是!!!它居然不支持关闭匿名用户访问。即使每个项目设置了权限,匿名用户登录Web之前还是能看到系统中的用户列表。gitbucket是基于Java的,下载下来就是一个war包,直接java -jvar gitbucket.war运行就可以,也不需要依赖其它内容,功能基本也是跟github一样,但可以关闭注册和匿名用户访问,而且也有按组设置项目权限,也支持关闭ssh方式访问。于是选定这个。前端用nginx反向代理就可以支持https了。

迁移方式:没有一键迁移的功能,只能一个项目一个项目的干了。在新的Git服务器上登录后执行:

git clone –bare 原git项目地址
cd 进入项目目录
git push –mirror 新git项目地址

这样就可以保持所有的分支和版本同步到新服务器上,然后用户端直接修改本地远程git地址为新地址,正常同步项目就可以了。

PS:原来gitbucket以前也长的跟github一模一样,后来被github警告了,被迫改版。不过自己改的界面确实不如github好看。