天天看點

SVN代碼遷移至Gitlab(保留日志)

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

去掉下圖配置

SVN代碼遷移至Gitlab(保留日志)