git学习——svn代码同步到git(3)

摘要:
Gitsvn将其最近接管的项目的代码同步并放入svn中,但svn推送分支的成本太高。每个分支目录都是完整的副本,因此项目使用git进行版本管理。最愚蠢的方法是创建一个新的git分支并重新提交svn代码作为源代码,但这种方法无法获得svn提交记录,这是版本跟踪无法容忍的。
git svn 同步

最近接手的项目代码放在svn,但是svn推送分支的代价太高了,每个分支目录都是一次全拷贝,所以项目转用git进行版本管理。
最傻的方法是新建git分支,将svn的代码作为源代码重新提交,但是这种方法没办法获取到svn的commit记录,这对版本追踪是不可忍的。所以放弃。
第二种方式,是将svn的分支连同commit记录一起merge到git,然后再用git进行版本管理。

参考资料:

1、http://blog.csdn.net/ouyang_peng/article/details/76220621

使用场景 :将已有的SVN项目迁移至git

场景一: 从旧SVN项目同步代码至新的git项目

注意:
该步骤只有第一次迁移的时候才需要做,一旦迁移成功,所有svn的代码都应该由git更新,不应该直接在svn上提交,否则版本库会乱

具体步骤

1、 在git 创建对应的project
2、 clone git项目
3、 在.git/config中添加svn-remote,创建命令如下。

[svn-remote "svn"]
	url = http://svn.*****.com/***********/branches/release
	fetch = :refs/remotes/git-svn-release

4、 第三步中创建了一个名为svn的git-svn同步分支,该分支为所有其他git分支连接SVN代码库的桥梁,只有当需要将代码同步至SVN时才会往该分支合代码

git学习——svn代码同步到git(3)第1张

5、 从空的svn远程库中做初始化fetch,并将其作为一个新分支checkout

git svn fetch svn 
git checkout -b svn git-svn-release

6、git show-ref命令查看分支情况
git学习——svn代码同步到git(3)第2张
到有个远程分支remotes/git-svn-release。

7、 假设我们所有的开发分支最后都要合到develop分支上,我们就用develop分支和同步分支做交互。

8、 checkout至develop分支,将svn分支merge进develop分支,这样SVN的代码库就原封不动连同日志一起在git中建立了起来。

git checkout develop
git merge svn --no-ff
git commit

场景二: 在已经使用git开发的情况下建立git到svn的同步机制

如果上述场景一已经做完,作为一个开发,我现在只能拉到develop分支,我如何建立起这么一套同步机制呢?
重做场景一中的前8步,这样使得我们本地有一个svn(和上面的并不是一个分支,没有联系),与之建立联系的是远程svn服务器上的git-svn分支
此时的develop分支和svn分支是两条从一个根节点出发的线,这个跟节点就是场景一中第一次将 svn merge入develop的这次提交。
虽然这两个分支最后当前的文件内容应该是相同的,但是git并不会这么认为,它会觉得这是两条截然不同的分支,为了能够让develop和svn建立起关系,需要再将develop和svn合并,把develop合入svn。

git checkout svn
git merge develop --no-ff

场景三,将改动提交到svn

已经建立git到svn的同步机制的情况下。

git checkout svn
git svn dcommit

免责声明:文章转载自《git学习——svn代码同步到git(3)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu 网关服务器配置Linux内核Radix Tree(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

GIT基础(八):查看提交历史

Git 提交历史一般常用两个命令: git log - 查看历史提交记录。 git blame <file> - 以列表形式查看指定文件的历史修改记录。 1 git log 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。 针对我们前一章节的操作,使用 git log ...

修改SVN的IP地址

项目开发中有可能要修改SVN的IP地址,entries文件里面包含svn服务器的地址信息。每个文件夹都会产生一个entries文件信息。在myeclipse或者flash builder中可以借助可视化界面来修改IP地址。步骤如下: 1.点击Window--->Others Views 选择SVN资源库视图。 2.选中要修改的svn地址,右键点击属...

多git账号配置解决方案

生成密钥 ssh-keygen -t rsa -C "gitlab 用户邮箱地址" ←┘ Generating public/private rsa key pair. Enter file in which to save the key (/Users/user/.ssh/id_rsa): ←┘ Enter passphrase (empty for...

在实际项目中使用git推代码踩过的坑

Git使用中出现的状况: BUG集锦: On branch dev nothing to commit, working tree clean 说明在dev分支上,没有什么提交,很干净; 2.fatal:couldn't find remote ref dev 新建项目时,pull出现的报错信息,说明项目还有有文件,时空的直接进行推代码 3.git p...

svn版本库操作(四)

一、使用命令行模式访问 SVN 服务器 1. 检出(checkout) (1) 首先进入自己的工作目录,例如:D:svnSpace cd D:svnSpace (2) 运行 svn checkout 命令,命令格式如下 # svn checkout svn://SVN 服务器主机地址/具体仓库目录 保存检出内容的目录 svn checkout svn:/...

SVN版本管理与大型代码上线

SVN版本管理与大型代码上线 一、SVN简介 SVN是近年来崛起的非常优秀的版本管理工具,是一个开源的版本控制系统,开发的代码版本,这些数据位置放置在一个中央资料档案库,很想一个普通的文件服务器或者FTP服务器与其他服务器不用的是,SVN会备份并记录每个文件每一次的修改更新变动,可以进行回滚操作,可以把任意一个时间点的档案恢复到想要的某一个旧的版本,也可...