使用Git来管理svn代码

背景简介

项目基于svn进行版本控制,trunk对应下一个即将上线版本A,A上线后切为分支branchA,手头要开发的几个功能对应下下个版本B,暂不能提到trunk上

此时有两种办法

  1. 在svn上建立一个自己的分支branch_zhangsan,将代码提到上面,之后再合并至trunk。
    (会导致几个功能代码都在一个分支内,将来合并trunk比较麻烦,同样会导致增加硬盘占用)
  2. 在本地copy几份svn目录,在每个目录中开发不同的功能,开发完毕留在本地,待branchA建立后提交到trunk
    (本地硬盘占用较多)

在svn库比较大时,占用会比较明显,故考虑在本地使用git来管理代码

使用git

主要是使用git svn命令将svn仓库下载到本地,在本地进行git的分支开发,最后在可以提交功能的时候将本地git分支代码合并至master,最后提交到svn服务器

建立仓库

需要打开git bash工具输入命令 -r 参数代表本地git需要根据svn信息来生成的svnlog记录 -r100:HEAD代表svn100至当前的记录本地git都能看(区间越大同步速度越慢,代码库大的时候巨慢) -rHEAD代表不看之前的记录(最快)

  • git svn clone -rHEAD https://192.168.1.101:8888/svn/MyServer MyServer1
  • (在执行上面命令时会弹窗让你输入svn的用户名 密码)

进行开发

在开发时就是普通的git开发流程了,对不同功能建立不同branch

先开发个功能1

  • git checkout master
  • git branch gongneng1
  • git checkout gongneng1
  • 为功能1写好一堆bug
  • git add .
  • git commit -m “gongneng1”

可能还要做个功能2

  • git checkout master
  • git branch gongneng2
  • git checkout gongneng2
  • 为功能2写好一堆bug,顺便喷一喷策划
  • git add .
  • git commit -m “gongneng2”

同步svn服务器代码到本地

我们开发时svn上其它人可能提交了许多代码,我们需要同步下来,以免本地与svn服务器差距过大,后面提交引起各种问题

  • git checkout master
  • 确保本地状态为clean
  • git svn rebase

合并分支

  • git checkout master
  • git merge gongneng1 无冲突的话git会自动提交,不需要后续几步
  • 如果有冲突则merge会停下来,还需要解决一下冲突
  • git status查看哪些文件冲突了,使用你习惯的工具解决
  • git add 冲突的文件
  • git commit -m “merge gongneng1”

提交代码到svn

  • git svn dcommit

撤销提交

在本地git提交代码后,有可能需要撤销提交

  • git reset --hard HEAD^ 将git强制回退到上一版本

合并过程中如果有冲突,git处于merging状态时,有可能不想合并了

  • git reset --hard HEAD 强制git恢复至当前版本初始状态

本人对git了解不多,写的也比较仓促,如有错误请留言指出

你可能感兴趣的:(程序人生,svn,git,服务器)