2019独角兽企业重金招聘Python工程师标准>>>
Gitolite和Gitlab仓库同步
调研目的
同步或者迁移gitolite和gitlab之间的仓库,便于维护多个服务器上的多个代码管理环境。
Gitlab的api
图一
由GitLab的官方文档可以看出,目前没有迁移gitolite项目到GitLab的api。查看其它资料,或者github上的相关脚本,基本上分为基本的三个步骤,将gitolite上的仓库下载到本地,在GitLab上创建对应的仓库,将仓库映射到GitLab的项目仓库上。
Gitolite仓库迁移gitlab
方法一(服务器批处理)
第一步,将gitolite复制到gitlab仓库目录下
# cp -r $Gitolite/repositories/* $GitLab/git-data/repositories/
执行导入处理程序
# gitlab-rake gitlab:import:repos
上面程序会处理一下目录结构,例如
进入gitlab web界面,创建仓库与导入的仓库同名,这样就完成了导入工作。
转换最好在git用户下面操作,否则你需要运行
# chown git:git -R /var/opt/gitlab/git-data/repositories
方法二(本地处理)
第一步
获得gitolite仓库的列表
ssh [email protected] info | awk '/^[ @]*R/{print $NF}'
第二步
图二 GitLab CI的API
根据上面的仓库列表,使用API或者command-line来创建GitLab仓库
初始化远程仓库的脚本git-init-remote
#!/bin/sh
repo=$1
token=put_your_api_token_here
test -z $repo && echo "Repo name required." 1>&2 && exit 1
curl -H "Content-Type:application/json" https://gitlab.com/api/v3/projects?private_token=$token -d "{ \"name\": \"$repo\" }"
第三步
下载Gitolite项目到本地仓库
#!/bin/sh
if [ “$#” -ne 5 ];
then echo “Usage: $0 GITOLITE GITLAB_URL API_TOKEN GITLAB_USER REPONAME” >&2
echo “For example: $0 [email protected] your.gitlab.com yoursecrettoken a-cool-repo”
exit 1
fi
GITOLITE=$1 GITLAB_URL=$2 API_TOKEN=$3 GITLAB_USER=$4 REPO_NAME=$5
git clone –mirror $GITOLITE:$REPO_NAME.git
./gitlab-init-remote $GITLAB_URL $API_TOKEN $REPO_NAME cd $REPO_NAME.git
第四步
同步本地仓库到GitLab服务器上
git remote add gitlab git@$GITLAB_URL
:$GITLAB_USER/$REPO_NAME.git
git push -f –tags gitlab refs/heads/:refs/heads/
有待验证
1)采用以上的方法,从Gitolite同步到Gitlab仓库,对应仓库的权限是否有变化。
Gitlab仓库迁移gitolite
可行性
gitolite管理项目仓库有两个重要的部分;
1) key 这key是用来控制访问者的身份认证;
2) gitolite.conf 该部分为访问控制权限
就目前来讲没有可以直接使用的api可以迁移Gitlab往gitolite上迁移。如果非要迁移的话并且是小批量的,可以手动将对应项目的key和访问控制权限拷贝到gitolite服务器上。否则,需要迁移大批量的项目代码的话,需要付出比较大的人工代价。
caveats:没有必要,早期gitlab使用gitolite为用户提供ssh服务,自从gitlab5.0以后开始采用了解决方案gitlab-shell,安装新版本的gitlab必定会让gitolite上的数据往gitlab上迁移。所以从gitlab往gitolite上迁移数据这个行为,如果没有很高的需求的话,没有必要做这样的数据同步。
总结
从技术潮流发展的趋势来讲,gitolite和Gitlab上进行数据同步是好多公司都会进行的事情,gitolite作为小团队进行代码集中管理还是小而美的,但作为中型或者大型企业级的代码管理控制工具,GitLab从易用性和科学性的角度都能很好的满足其需求,而gitolite这样的代码托管工具恰恰缺少企业用户最关心的需求。那也就说明再将gitlab上已有的代码同步到gitolite上以及是一种逆技术潮流的行为,一般这样做,是很不明智的。在完成这次同步以后,我建议以后托管代码尽量托管到GItlab上,同种工具,这样便于以后做数据同步。
参考文献
http://doc.gitlab.com/ce/api/
http://binaryadventures.com/blog/migrating-from-gitolite-to-gitlab/