迁移Gitolite仓库到GitLab(一)

GitoliteGitlab仓库同步git

调研目的

同步或者迁移gitolitegitlab之间的仓库,便于维护多个服务器上的多个代码管理环境。github

Gitlabapi

图一web

GitLab的官方文档能够看出,目前没有迁移gitolite项目到GitLabapi。查看其它资料,或者github上的相关脚本,基本上分为基本的三个步骤,将gitolite上的仓库下载到本地,在GitLab上建立对应的仓库,将仓库映射到GitLab的项目仓库上。shell

Gitolite仓库迁移gitlab

方法一(服务器批处理)

第一步,gitolite复制到gitlab仓库目录下json

# cp -r $Gitolite/repositories/* $GitLab/git-data/repositories/

执行导入处理程序api

# gitlab-rake gitlab:import:repos

上面程序会处理一下目录结构,例如服务器

进入gitlab web界面,建立仓库与导入的仓库同名,这样就完成了导入工做。app

转换最好在git用户下面操做,不然你须要运行ssh

# chown git:git -R /var/opt/gitlab/git-data/repositories

方法二(本地处理)

第一步curl

得到gitolite仓库的列表

ssh git@your.gitolite.com info | awk '/^[ @]*R/{print $NF}'

第二步

图二 GitLab CIAPI

根据上面的仓库列表,使用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 git@your.gitolite.com 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能够迁移Gitlabgitolite上迁移。若是非要迁移的话而且是小批量的,能够手动将对应项目的key和访问控制权限拷贝到gitolite服务器上。不然,须要迁移大批量的项目代码的话,须要付出比较大的人工代价。

caveats:没有必要,早期gitlab使用gitolite为用户提供ssh服务,自从gitlab5.0之后开始采用了解决方案gitlab-shell,安装新版本的gitlab一定会让gitolite上的数据往gitlab上迁移。因此从gitlabgitolite上迁移数据这个行为,若是没有很高的需求的话,没有必要作这样的数据同步。

总结

从技术潮流发展的趋势来说,gitoliteGitlab上进行数据同步是好多公司都会进行的事情,gitolite做为小团队进行代码集中管理仍是小而美的,但做为中型或者大型企业级的代码管理控制工具,GitLab从易用性和科学性的角度都能很好的知足其需求,而gitolite这样的代码托管工具偏偏缺乏企业用户最关心的需求。那也就说明再将gitlab上已有的代码同步到gitolite上以及是一种逆技术潮流的行为,通常这样作,是很不明智的。在完成此次同步之后,我建议之后托管代码尽可能托管到GItlab上,同种工具,这样便于之后作数据同步。

参考文献

http://doc.gitlab.com/ce/api/

http://binaryadventures.com/blog/migrating-from-gitolite-to-gitlab/

相关文章
相关标签/搜索