svn 迁移至git操做手册html
项目交付、版本管理工具变动等状况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等。git自带了从svn迁移至git的工具命令,可很好的对svn上的提交历史作迁移和映射,操做简单方便。可是初次接触不熟练,这里作一个总结和记录,内容尽可能简单化。争取提供给刚刚接触git和准备迁移的用户一个简单易懂的方案。mysql
旧svn服务器:192.168.1.185(对生产的敬畏)git
新svn+git服务器:192.168.1.203github
我是把旧的svn经过dump下来传到203的svn上面这须要点时间,这个原理跟mysql的dump同样sql
把SVN上的代码仓库迁移到Gitlab上,实际上就是把SVN仓库转变成Git仓库,而且但愿能保留原SVN仓库的Commit等历史记录,这一点很重要。
SVN迁移到Gitlab须要安装git-svn 服务器
yum install -y git-svn
创建users.txt(存储svn帐号与gitlab上帐号的关联性)svn
svn log svn://192.168.1.203 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > ./users.txt
获得的结果:工具
而后开始把SVN仓库转变成Git仓库,执行如下命令:gitlab
git svn clone svn://192.168.1.203/XinglvTmc/ --no-metadata --authors-file=users.txt --trunk=trunk --tags=tags --branches=branch XinglvTmc
git remote add origin URL
注:目的地gitlab仓库地址post
git push origin --all
为了将标签变为合适的 Git 标签,运行
# cd my_project # cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ # rm -Rf .git/refs/remotes/origin/tags
这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。
接下来,将 refs/remotes 下剩余的引用移动为本地分支:
# cp -Rf .git/refs/remotes/* .git/refs/heads/ # rm -Rf .git/refs/remotes
git remote add origin http://192.168.1.203/root/xinglvtmc.git/
不当心将git远程地址配错了,再次配置提示如下错误:
fatal: 远程 origin 已经存在。
此时只须要将远程配置删除,从新添加便可;
git remote rm origin
git remote add origin https://github.com/***/WebCrawlers.git
再次提交文件便可正常使用
粗心形成的小错误,顺便说一下,若是git没有commit就执行push操做会出现如下错误
fatal: unable to access 'https://github.com/***/WebCrawlers.git/': Empty reply from server
解决:只须要先commit 在 push便可