一、svn与git的比较:
- git是分布式的,你可以从任一节点pull或push代码
- git不需要联网也可以commit,commit也可以合并
- git分支之间很方便merge,也可以只pick某个commit
- git很容易撤销修改和恢复版本
- SVN使用简单,只需commit与update
- SVN权限管理可以限制到单个文件
二、使用
- git clone(ssh+http(s))
- git add & commit, git pull & push
- git status & log & blame
- git checkout & git reset
- git remote
- git cherry-pick
三、常用准则
- 经常pull代码,与最新代码保持同步
- 多点commit代码,如果没有做完可以不push,但是一天至少push一次。避免本地代码丢失
- 独立功能尽量新开feature分支,开发完后再merge到develop分支
- merge代码要小心,最好使用IDE或者GUI工具来pull代码,merge代码冲突的话它有很好的提示和merge方法
- 每次push代码前确保代码能编译通过
- commit Message要能说明本次修改的目的。最好遵循一定的规范
四、commit规范文案
- add: 增加相应功能
- change: 修改相册浏览界面
- update: 更新分享到第三方的库
- fix: #169 #124(没有bug编号的直接把问题描述写上)
- 准则就是要方便追溯问题
五、git-flow
- 多个版本同时进行开发。1.0版本还在改bug阶段,1.1要进行开发
- 多个团队同时进行开发。某个团队开发一个功能分支,另外一个团队需要另一个功能分支
- 新版刚发不久,发现严重bug需立即修复
- 是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践
- 工作流定义了一个围绕项目发布的严格分支模型。虽然比功能分支工作流复杂几分,但提供了用于一个健壮的用于管理大型项目的框架
六、git-flow分支
- master:存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签
- develop:保存当前最新开发成果的分支。通常这个分支上的代码也是可进行每日夜间发布的代码(Nightly build)
- release:当开发结束后用来提测的分支,所有测试阶段的bug全部在此分支修复,测试结束后合并到 master 和 develop 分支中
- feature: 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支
- hotfix: 当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支
七、总结
- 一切皆分支,本质是分支管理
- 严格规定了哪些分支从哪里产生,最终合并到哪些分支上
- 结合SourceTree第三方工具很方便使用
- 多人和多团队协作很有用