前题
构建自己的Git服务器,GitLab软件已经开始收费,GitHub要翻墙;如果想自己创建一个自己的git服务器,不仿可试试Gerrit,而且还有Code Review的功能,不可谓不强大。
这就涉及到现有Git项目的迁移问题,下面经过几个步骤就可以将项目完美的迁移到自己的Gerrit服务器上了。
导出项目
从GitLab或GitHub中导出项目,以下脚本(路径为:backup/export.sh)是批量导出的脚本,导出的时候如果可能建议在项目所在服务器上执行,这样导出的速度会很快。
cd backup
/bin/bash export.sh
#!/bin/bash
#定义数组,定义需要备份的项目名
projects=(ctdn_etl galaxy-common k8s newfw-base phyfire questionnaire_web starfire wikidata ctdn-page galaxy-platform kuku)
for pjname in "${projects[@]}"
do
git clone --mirror "ssh://root@127.0.0.1:29418/${pjname}"
done
脚本会备份相关的项目到当前目录,查看当目录
[root@xxxhost backup]# ls
ctdn_etl.git galaxy-common.git k8s newfw-base.git phyfire.git questionnaire_web.git starfire.git wikidata.git
ctdn-page.git galaxy-platform.git kuku.git
使用gerrit的api创建项目
执行该脚本(路径:backup/create_project.sh)会在自己的gerrit服务上创建数组中定义的项目,方便后续导入
#!/bin/bash
#定义数组,定义需要备份的项目名
projects=(ctdn_etl galaxy-common k8s newfw-base phyfire questionnaire_web starfire wikidata ctdn-page galaxy-platform kuku)
for i in "${!projects[@]}"
do
file=${projects[$i]}
curl -v -X PUT -u root:r9R+Cx5SwtqgTIkcJ6bJI+ZMjv/INwC4kRhzjcqK1A \
--header "Content-Type: application/json; charset=UTF-8" \
--data '{"http_password": "r9R+Cx5SwtqgTIkcJ6bJI+ZMjv/INwC4kRhzjcqK1A"}' \
http:/127.0.0.1:30808/a/projects/${file}
done
注意:在使用Gerrit Api创建项目的过程中,会存在用户验证的问题。示例中创建的Gerrit服务器使用的验证方式为HTTP(即用户的验证过程是使用Nginx完成的)。那么这个密码有一个严格的要求,就是在Nginx中设置的用户要与用户在web页面中设置的密码一致。
1、生成web页面中的密码


复制生成的密码:ISFDDSSjjoF3eslfwfEO/TD5PdE1wYbkni7qQ4JBGKg
2、设置nginx下的密码
cd /opt/nginx/conf
htpasswd -m gerrit.password root
输入上面的密码:ISFDDSSjjoF3eslfwfEO/TD5PdE1wYbkni7qQ4JBGKg
通过两次操作之后,才会允许使用Gerrit Api来创建项目
导入项目
建议导入的过程在Gerrit的服务器上执行,这样会保证导入速度;将导出的文件拷贝到Gerrit服务器的过程略掉。
#!/bin/bash
LSLIST=`ls /opt/backup/backup`
for file in $LSLIST
do
if [ $file != "All-Projects.git" -a $file != "All-Users.git" ];then
pjname=${file%.*}
cd /opt/backup/backup/${file}
git remote set-url origin "ssh://root@127.0.0.1:29418/${pjname}"
git push --mirror root@127.0.0.1:/opt/docker_data/gerrit_dokbok/git/${file}
cd /opt/backup/backup
fi
done
注意:/opt/docker_data/gerrit_dokbok/git这个目录是Gerrit服务器的存放所有Git项目的目录