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/