迁移Git项目到Gerrit服务器

前题

构建自己的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项目的目录

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注