从这篇开始技术博客之行吧。
先前的项目的版本控制都用的是svn,各版本之间分界很不明显,有可能1.0.0版本写好了准备发版,突然来了新需求,加了新代码,而且这个新功能跟之前的代码有比较严重的耦合,上线前突然又说功能不要了,先要隐藏,当时还是菜鸟,对版本控制的理解非常浅薄,所以只能从代码里清理……过程不想再说,非常痛苦。
后来为了避免这种情况,很笨拙的每个版本结项的时候,都会把整个项目的代码打包放到svn……如果之前版本的代码有bug,就把之前那个包打开改,然后覆盖之前代码,非常笨拙。
来到新公司接触到了git,学习了一下,现在觉得git flow这种工作流很科学,现在简述一下目前的基本操作,如果有初学者,从大概念上理解这种工作流程会在使用起来更得心应手。部分内容参考或许是介绍Android Studio使用Git最详细的文章 - 简书,在此感谢原作者。
git flow
Git flow是广泛采用的一种工作流程
他的主要特点有两个:
1.首先,项目存在两个长期分支
- 主分支master
- 开发分支dev
前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。
2.其次,项目存在三种短期分支
- 功能分支(feature branch)
- 补丁分支(hotfix branch)
- 预发分支(release branch)
用到我个人项目里来说:
开发的初始版本就是主分支master,可能就是AS默认的项目,或者是从前面同事clone下来的项目代码,这个就是最基础的版本,可以作为1.0.0版本,然后最重要的东西来了,那就是记住一句话:
“master分支里的代码永远都不是手写进去的,永远是其他分支merge进来的”
merge这个功能,简单说来就是你在广场拼零件,拼好了最后全部怼到车间里,而master分支就是那个车间,master分支的产出永远都是成品。
剩余的dev分支,就是自己开辟的广场了,你可以在在上面拼你想要的东西
留个坑,明天来填。
20190819填坑…………
经过了学习和验证,现在终于有资格来填坑了。
首先必须要明白一个git的基准点,即,
“每个提交其实都是一个引用”
会有一个随机分配的hash码,对应这次提交的代码"改动”,也就是说每次的分支切换,只是记录了引用之间的联系和区别。比如从branch1 切换到branch2,整个代码完全没有任何变化或者复制粘贴,还是原来的代码,但是此时的HEAD节点,指向了一个新的引用,来回切换的话也是切换HEAD节点。这样的话怎样解决文章开头的难题呢?
简单还原一下情景:
首先master上是有代码的
this is master 1.
this is master 2.
this is master 3.
这时我们从master new 一个branch 出来叫 develop
现在develop分支上的代码跟master相同
现在继续在develop上开发,开发完毕后master没变,develop分支变成了
this is master 1.
this is master 2.
this is master 3.
this is develop 1.
this is develop 2.
开发到这里,master版本上线后出现了bug,现在需要修改,同时希望修改完以后,正在测试中的develop版本也能把这个bug修复掉,遇到这种情况,如果在develop分支上改,然后merge进master,那develop版本的新功能会被merge进去,如果在master上改,就违反了mastere只能从别的分支merge进来的规则。通过学习和验证,现在终于有了一个比较简单两全的办法:
切换到master分支,以master分支为基础new 一个 bug_fix分支,在bug_fix分支上做出修改,最终bug_fix分支的代码如下:
this is master 1.
this is master 2.
this is master 3.
this is bug_fix 1.
this is bug_fix 2.
this is bug_fix 3.
修改完,进行一次commit,使这次改动独自占用一个分支和引用,然后分别切换到master和develop,把此bug_fix分支merge进来,最终master与bug_fix一致,develop可能会有冲突,经过处理后,develop为
this is master 1.
this is master 2.
this is master 3.
this is develop 1.
this is develop 2.
this is bug_fix 1.
this is bug_fix 2.
this is bug_fix 3.
此时把bug_fix分支删掉即可。
网友评论