Git 实践:SVN 迁移 Git
Posted 天空的代码世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git 实践:SVN 迁移 Git相关的知识,希望对你有一定的参考价值。
零、背景
之前提起过,以后不使用 SVN 了,要使用 Git 来管理项目了。
对于 Git,已经分享了一个基本的命令操作手册《》。
今天来看看 Git 的第一个实践:SVN 项目迁移到 Git。
一、创建项目成员文件
成员文件格式如下:
如果确认只有你自己,可以直接使用手动编辑出这个文件,如果多人开发,可以使用svn命令处理得到。
命令如下:
cd svnProjectDir
svn log --xml | grep author | sort -u | sed 's/.*>\(.*\)<.*/\1 = \1 <\1@tencent.com>/' > authors.txt
二、使用SVN创建git本地仓库
使用 git svn clone 命令把 svn项目转化为 git 项目。
命令格式:
git svn clone svnProjectUrl gitName
如果SVN比较大的话,可以直接指定svn的版本号来拉取,这样快点。
命令参数:-r 231227:HEAD
如果你的项目使用标准的分支或tag管理的化,也可以自动转化为git的分支和tag。
命令参数:-T trunk -b branches -t tags
如果三个都是标准的,可以使用 --stdlayout 或 -s 来标示遵循了基本的分支和标签命名法则。
三、提交到GIT远程仓库
将本地的 Git repo push 到远程仓库:
cd gitName
git config user.name "gitName"
git remote add origin gitRemoteUrl
git push -u origin master
push 所有的 branch:
git push origin --all
push 所有的 tag:
git push origin --tags
效果图(这是新创建的git项目哦):
问题1:远程提交失败
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。
详见提示:'git push --help' 中的 'Note about fast-forwards' 小节。
这个是由于这个项目不是clone下来的,而是本地创建的。
需要先把远程的仓库信息拉下来:git pull origin master。
问题2:拉取失败
fatal: refusing to merge unrelated histories
fatal: 拒绝合并无关的历史
这是因为本地仓库与远程仓库没有关闭,没法自己合并。
我们可以强制合并两个仓库。
git pull origin master --allow-unrelated-histories
问题3:未提交合并,使用 'git commit' 完成此次合并
这是因为合并完的代码还处于储存区,需要提交到本地仓库。
git commit -m "add README.md"
四、SVN有更新
svn 拉数据、合并到 Git、git 提交。
git svn fetch
git merge refs/remotes/git-svn
git push origin master
五、推动到SVN服务器
git svn dcommit
如果执行的时候报下面这个错误,是因为clone的时候加了--no-metadata 参数。
Unable to determine upstream SVN information from HEAD history.
去掉--no-metadata 重新clone即可。
六、最后
使用这个方法我创建了两个Git项目。
一个是和SVN保持完全一样,任何一个地方更新后都可以在另一个地方合并上去。
另一个是把两个项目合并到一个上去了,由于是两个SVN项目对应一个Git项目,目录也存在调整,没办法再和SVN互相推数据了。
另外,短期内 Git 的分享应该结束了,等用一段时间 Git 后再分享项目管理与分支合并。
参考资料:
https://git-scm.com/book/zh/v1/Git-与其他系统-迁移到-Git
我是谁:
我是天空,这里有计算机技术、理财、读书、电影、以及一个程序员的生活。谢谢你的关注、赞赏、留言、转发、点赞、阅读。
推荐阅读:
❖都是对笔者的一种支持 ❖
以上是关于Git 实践:SVN 迁移 Git的主要内容,如果未能解决你的问题,请参考以下文章
将特定的 SVN 分支迁移到 GIT(2018 年迁移的主干)