SVN代碼遷移至Gitlab
1.導出SVN送出使用者(需要在SVN代碼目錄執行,并且要在GIT BASH 視窗運作)
svn log --xml | grep "^<author" | sort -u | \awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt
導出後格式如下:
aaa
bbb
ccc
需要格式化為下面格式(下面指令中指定的 userinfo.txt 就是處理後的SVN賬号):
aaa = aaa <aaa @aaa.com>
bbb = bbb <bbb @bbb .com>
ccc = ccc <bbb @bbb .com>
2.拉取SVN代碼及日志
主幹、分支、标簽不是标準名稱需要自己指定:
git svn clone SVN路徑 --no-metadata --trunk=主幹 --tags=tags --branches=branches --authors-file=./userinfo.txt 檔案夾(存放拉取代碼)
是标準名稱(--trunk=trunk --tags=tags --branches=branches),使用 --stdlayout 即可,或 -s:
git svn clone SVN路徑 --authors-file=./userinfo.txt --no-metadata --stdlayout --no-minimize-url 檔案夾(存放拉取代碼)
我用上面兩種方式都不行,拉下來的隻有 .git 檔案夾,沒有代碼,最後用的下面指令可以了:
git svn clone SVN路徑 --authors-file=./userinfo.txt --no-metadata --no-minimize-url 檔案夾(存放拉取代碼)
'--no-minimize-url '參數,意思是不縮小輸入位址。
3.目錄修改(我當時沒有做這個操作也可以,建議做下面操作)
# SVN标簽轉為GIT标簽(如果沒有标簽可以忽略此步)
cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/tags
# 修改索引為本地分支
cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes
4.推送代碼至GIT伺服器(具體參照GITLAB伺服器指令操作即可,省略 git init 步驟)
4.1 先在GIT伺服器把倉庫建好;
4.2 git init 這部可以省略,因為 .git目錄已經存在
4.3 git remote add origin GIT倉庫位址
4.4 git add .
4.5 git push -u origin master
遇到問題
1.報錯:
15:13 Commit failed with error
0 files committed, 1 file failed to commit: test commit 0820
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
不能正常送出代碼,解決:
運作git config core.ignorecase false,關閉git忽略大小寫配置
2.項目提示 pending
去掉下圖配置
