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


Git 实践:SVN 迁移 Git


二、使用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项目哦):

Git 实践:SVN 迁移 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 年迁移的主干)

SVN迁移到GIT

svn迁移至git指南

SVN 到带有提交历史的 GIT 迁移(使用 git svn)

SVN迁移到git

svn迁移到git