svn迁移到gitlab
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 标签