關於svn項目遷移有人可能會說,新建一個git項目,把原來的代碼直接扔進去提交不完了嗎。恩,是的,沒錯。但是為了保留之前的歷史提交記錄,還是得做下面的步驟
首先確保本地正常安裝配置好git,具體步驟不再贅述。
需要配置name和email
在git bash中采用以下命令
git config --global user.name "你的名字"
git config --global user.email "你的郵箱”
1、要遷移的項目從svn clone到本地
git svn clone -s svn://ip/項目名稱 --no-metadata
此處 -s 表示svn標准目錄結構:trunk、branches、tags的定義的項目,如果不采用標准結構,那么就需要如下參數
--trunk="svntrunk" --branches="svnbranches“ --tags=“svntags”。
根據項目trunk結構,clone語句改寫為:
git svn clone -s svn://ip/項目名稱 --no-metadata --trunk="trunk/項目名“ --branches="branches" --tags="tags"
在git bash中輸入上面語句提示輸入有該項目權限的svn賬號和密碼,輸入后等待svn拷貝到本地(項目較大時,需要數小時)
拷貝完后,cd 項目名 跳轉到項目目錄
git branch -a 查看分支事是否正確
2、將一些遠程分支遷回本地分支
實際應用中,如果項目在svn有tags標簽,先把遠程(remotes)標簽變成適合的本地git標簽,運行:
cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
上面這一句,把tags去掉了remotes拷貝一份,
rm -Rf .git/refs/remotes/tags/*
這一句刪除了帶remotes的tags,所以運行前請確認已拷貝成功。通過以上兩條命令會將原本以remotes/開頭的遠程tags變成git標簽
然后,把refs/remotes下面剩下的索引頁變成本地git分支:
cp -Rf .git/refs/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/*
3、gitlab中新建要一個名叫demo的項目
4、設置remote分支,並push
去掉默認遠程倉庫地址,把gitlab設置為默認遠程庫
git remote rm origin
git remote add origin ssh://git@192.168.224.134:30128/demo.git
上傳所有分支
git push origin -all
----------------------------------如果你的項目就只是用gitlab管理代碼,到這里就可以了----------------------------------------
5、如果有用gerrit代碼審核工具,那么創建gerrit項目並同步gitlab的項目內容
1)、創建名為demo的項目
2)、gerrit采用docker部署,進入gerrit容器
cd /var/gerrit/review_site/git
rm -rf demo.git //剛創建demo項目的git目錄
su-exec gerrit2 git clone --bare ssh://git@192.168.224.134:30128/demo.git //gerrit2是在gitlab中新建demo項目后,添加的一個項目成員gerrit2
3)、配置代碼合並后自動同步gitlab代碼
跳轉到同級目錄etc/,修改配置文件replication.config
cd ../etc/
vi replication.config
文件末尾加上:
[remote "demo"]
projects = demo
url = ssh://git@192.168.224.134:30128/demo.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
threads = 3