背景简介
项目基于svn进行版本控制,trunk对应下一个即将上线版本A,A上线后切为分支branchA,手头要开发的几个功能对应下下个版本B,暂不能提到trunk上
此时有两种办法
- 在svn上建立一个自己的分支branch_zhangsan,将代码提到上面,之后再合并至trunk。
(会导致几个功能代码都在一个分支内,将来合并trunk比较麻烦,同样会导致增加硬盘占用) - 在本地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了解不多,写的也比较仓促,如有错误请留言指出