本文是基于git命令进行展开介绍的,window上的图形化操做tortoiseGit ,也能够图形化完成下方的介绍,思路相同,操做更简单,对应的按钮菜单都有,不在赘述git
本文仅提供指导和介绍,若是遇到文中未遇到的场景或问题,请自行实践验证后再进行实际的操做,百度,google,bing等等缓存
实践,很关键,命令行提示信息很关键bash
固然,最后,你要先会git,明白原理,知道分支用法,才能更好的理解git svn;app
因为公司的代码库,如今并行有2种,svn和gitlab,可是你们都懂得,一旦你习惯了git的工做模式,就很难回去了,每次使用svn就想新建个分支,本身搞一搞,什么之类,也所以给测试人员带来了麻烦(被吐槽o(╯□╰)o),基于遇到问题,解决问题的 的探索精神,决定研究一下git自己提供给咱们的联动工具;svn
英文ok的同窗能够直接看这里, 官方git-svn工具
简单说一下:git-svn 是git 提供的一个双向操做的方式,便可以经过它将svn上的代码归入到git的管理,同时在本地使用git操做代码,最后将最终要提交到svn的代码,经过相关的命令从git库中提交到svn库中;gitlab
2.一、操做命令总述测试
序号 | 命令 | 说明 |
---|---|---|
1 | git svn clone (svn仓库) | 从svn端clone一个git仓库到本地 |
2 | git svn rebase | 同步svn代码修改到本地分支 |
3 | git svn dcommit | 提交本地修改到svn |
4 | git add (./changed file) | 将修改归入到暂存区 |
5 | git commit | 提交暂存区的修改到仓库 |
6 | git stash | 提交代码到缓存队列 |
7 | git stash apply | 应用缓存队列中的缓存数据到本地 |
8 | git branch (分支名称) | 新建分支 |
9 | git checkout (分支名称) | 检出分支 |
- 一、使用git svn 在本地clone 一个受git 管理的仓库
- 二、在本地进行代码的修改和其余变更[就是在git的仓库下的操做],注意分支
- 三、将最终修改的代码,提交到svn端
我的建议:ui
(1) 少许修改能够尝试,使用git的stash暂存修改代码,同步svn端的变更以后,以后还原修改,再同步到svn ----> 对应练习场景三
(2) 若是是大量变更,建议保持master分支的干净,保持只有master于svn 同步(即,只在master分支上,执行相关的git svn 命令),在单独的开发分支,进行开发,最终 merge 或 rebase 修改到 master 分支(注意:合并以前先同步svn端的更新),而后同步到svn;----> 对应练习场景四google
注意:合并以前先同步svn端的更新
注意:合并以前先同步svn端的更新
注意:合并以前先同步svn端的更新
重要的事情说三遍!!!
写在前面
- 一、下方场景有前提,请阅读场景说明
- 二、下方练习场景,可能对应你实际应用中的不太场景下的操做,请思考匹配使用
- 三、若是遇到其余问题,请阅读相关的命令行说明,自行解决或百度(可能会遇到记录同步时的,记录不匹配的问题,可能须要 使用git rebase 命令,详细根据具体场景,自行根据命令行分析)
场景1: 新建一个Git svn 库,而后提交修改的代码 「注意」此种操做场景比较理想,这里假设的是svn 端在修改期间没有新的人提交修改。
// 先从svn上选一个地址,经过git svn 命令clone到本地
git svn clone (一个svn仓库地址)
// 在本地修改内容,并提交
git add ./changed file
git commit -m "说明文字"
// 使用git-svn命令将修改提交到svn库
git svn dcommit
复制代码
场景2:clone 仓库过了一段时间以后,在操做期间是有修改,而后再经过git svn 仓库修改代码;
// 首先 同步 svn 端的修改
git svn rebase
// 更新 了远端资源以后,在修改本地的相关文件,并提交
git add ./changed file
git commit -m "说明文字"
// 使用git-svn命令将修改提交到svn库
git svn dcommit
复制代码
场景三: 更改了本地的代码,在提交以前 发现端有更新
// 先暂存 本地修改的代码到 stash (详细能够自行百度)
git stash
// 同步 svn端的更新
git svn rebase
// 再从stash 中取出以前存储的修改
git stash apply
// 若是用冲突,解决冲突,并提交
git add ./changed file
git commit -m "说明文字"
// 使用git-svn命令将修改提交到svn库
git svn dcommit
复制代码
场景四:保持master分支干净,master 于svn库同步交流,在别的分支进行代码修改
//基于clone好的仓库,新建分支修改代码
git branch changeBranch
//在 changeBranch分支上进行代码修改,并提交
git add ./changed file
git commit -m "说明文字"
// 切换回 master分支,同步svn端的修改
git checkout master
git svn rebase
// 同步完成后,合并changeBranch分支的修改
git merge changeBranch
// 提交最终修改到 svn
git svn dcommit
// 题外话:上述操做完成后,你会发现,分支changeBranch 分支已经没有用了,能够进行删除,避免开发迭代后,分支过多而混乱
git branch -d changeBranch
复制代码
2.二、示例操做
此处仅仅列出了简单的场景(练习场景一),其余场景,能够自行根据练习,自行实现
一、使用git-svn clone 一个svn仓库的地址到本地,例如
git svn clone http://XXXXXXXXXXXXXXXXXXXXXXXX-gitSvn
复制代码
如上图所示,clone下来的工程,会将svn库中的代码记录也同步带git库中(真是贴心方便,(:зゝ∠))
二、在clone到本地的仓库,进行代码的修改并提交
此处命令仅仅是演示,详细使用须要了解相关的命令而后并操做
// 先修改文件内容;
git add ./或者文件名
git commit -m "提交内容。。"
// 而后同步修改都svn 端
git svn dcommit
复制代码
第一步: 创建仓库: 使用git svn clone
第二步: 在本地仓库,创建修改分支 newBranch
第三步: 在修改分支newBranch 修改代码, 在master上同步svn上的代码
第四步: 完成在修改分支newBranch的开发后,先切回master分支上同步svn的修改
第五步: 在本地合并操做 newBranch的修改到 master分支,
第六步: 解决冲突后,提交master上的修改到svn端;