Gitolite和Gitlab仓库同步git
同步或者迁移gitolite和gitlab之间的仓库,便于维护多个服务器上的多个代码管理环境。github
图一web
由GitLab的官方文档能够看出,目前没有迁移gitolite项目到GitLab的api。查看其它资料,或者github上的相关脚本,基本上分为基本的三个步骤,将gitolite上的仓库下载到本地,在GitLab上建立对应的仓库,将仓库映射到GitLab的项目仓库上。shell
第一步,将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 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 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仓库,对应仓库的权限是否有变化。
可行性
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://binaryadventures.com/blog/migrating-from-gitolite-to-gitlab/