今天接到任务要把部门一个svn项目迁移到git上去,这对我这个菜鸟来说还是比较难受的。因为我git学了个半吊子,svn又完全没有接触过,但是没办法,硬着头皮也得上啊。
花了一个小时的时间在网上查了各种关于svn的教程,然后又简单了解了svn与git的不同之处,幸亏大佬又给我了帮助文档,在万分感激中开始迁移工作。
首先,需要知道项目的svn链接,这里假设项目路径为svn://practice。同时确保你要迁移的git项目已经创建,没有就创建一个喽,这里假设git仓库的地址为http://test.git。
在你本地选定的仓库下执行如下命令,这里假设本地仓库的名字叫做gittest。
git svn clone svn://practice --authors-file=authors.txt --no-metadata gittest
关于--authors-file=authors.txt 和--no-metadata可以参考如下链接https://git-scm.com/book/zh/v2/Git-与其他系统-迁移到-Git。
进入到gittest目录下,接下来将refs/remotes
下剩余的引用移动为本地分支:
rm -Rf .git/refs/remotes
现在所有的旧分支都是真正的 Git 分支,并且所有的旧标签都是真正的 Git 标签。 最后一件要做的事情是,将你的新 Git 服务器添加为远程仓库并推送到上面。 下面是一个将你的服务器添加为远程仓库的例子:
$ git remote add origin http://test.git
因为想要上传所有分支与标签,你现在可以运行:
$ git push origin --all
到此,你的项目因该已经上传到git上了。
但是还存在着一些问题,由于开发流程的不规范,有些原svn上的代码与线上代码不一致,以后要走git的发布流程必须保证git上的代码与线上的代码一致,此时可以拉取线上的代码重新上传git仓库,过程如下:
我现在只想要py和go的脚本,不想要其他一些无关的日志文件,而且tmp目录的所有文件我都不想让它出现在项目里。刚开始我用如下的命令打包线上代码:
sudo find /data/test -path "/data/test/tmp" -prune -o -name "*.py" -o -name "*.go" | xargs tar -czvPf gittest.tar.gz
关于这条命令的细节可以参考https://blog.youkuaiyun.com/u011517841/article/details/53204524,-path 显示除当前目录之外的所有文件,如果/data/test/tmp存在,则-prune