Prerequisites:本機安裝git 客戶端
遷移:
- 安裝好git客戶端,在指定文件夾下,右鍵,Git bash here進入git bash
2. 建立users.txt(存儲svn賬號與gitlab上賬號的關聯性)
格式: svn用戶名 = git用戶名,如:
注意: svn里面有的賬號必須要做關聯,否則clone會失敗。比如上面的user11找不到是哪個開發人員,也不知道它該對應哪個git賬號,那就隨便指定一個git賬號就行了,這樣做的目的其實就是將user11在svn里面的所有提交日志 關聯到yqdong的git賬號下。轉到git之后,原svn賬號就無關緊要,各司其職了。
綁定 users.txt 的意義僅在於,將svn里面的提交者日志,注意是提交者,不是svn里面所有的用戶信息都得關聯,僅僅是往項目提交過代碼的svn賬號,將這些svn賬號找出來,然后關聯到現有的git賬號,一旦轉到git上之后,每個git用戶就能看到自己過去在svn里面提交的日志,繞了這么大一圈,現在明白了吧?
可以通過以下命令快速創建 users.txt
svn log URL -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
注:URL是要遷移的svn項目地址
3. 導出svn上的項目數據
-
git svn clone URL --trunk="trunk" --tags="tags" --branches="branches" --authors-file=./users.txt --no-metadata
注:URL是要遷移的svn項目地址
-
注:--trunk --tags --branches參數當且僅當要遷移項目有這些分支才添加。
4. 添加GitLab到Git源信息
git remote add origin URL
注:目的地gitlab倉庫地址
5. 將trunk, branches等上傳
git push origin --all
svn遷移gitlab(二)
當svn倉庫里有tag、branch時,會發現照着上面遷移gitlab上面是沒有tag、branch,故遷移失敗。研究發現在第3步導出svn上的項目之后,需要一點post-import(導入后) 清理工作。最起碼的,應該清理一下git svn 創
建的那些怪異的索引結構。首先要移動標簽,把它們從奇怪的遠程分支變成實際的標簽,然后把剩下的分支移動到本地。
- 要把標簽變成合適的Git 標簽,運行(選,如果有tag則執行)
$ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/ $ rm -Rf .git/refs/remotes/tags
該命令將原本以tag/ 開頭的遠程分支的索引變成真正的(輕巧的)標簽。
- 把refs/remotes 下面剩下的索引變成本地分支
$ cp -Rf .git/refs/remotes/* .git/refs/heads/ $ rm -Rf .git/refs/remotes
現在所有的舊分支都變成真正的Git 分支,所有的舊標簽也變成真正的Git 標簽