设为首页 收藏本站
查看: 1602|回复: 0

[经验分享] 干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)

[复制链接]

尚未签到

发表于 2018-1-13 11:27:07 | 显示全部楼层 |阅读模式
  突然想写这一篇 Git 的使用心得,主要有几个原因,其一是自己使用 Git 也有快3年时间了,其间自己经历过一些坑,也有迷茫的时候,在呆过的大大小小的团队中,其实每个人也都并不是 Git 专家,很多对于流程以及 Git 本身的理解,还处于一个比较混乱的地带。自己写这篇文章希望能抛砖引玉,在总结自己得失的同时,能给大家带来更深层次的思考。
  直接进入主题,经过这么多年的实践,多次想避开 Git Flow 寻找更简单的流程,每次自认为找到了捷径,但事实上都发现有这样或者那样更多的问题,所以,我认为最佳的 Git 实践,仍然得基于标准的 Git Flow,来看看 Git Flow 的标准模型,下面是大家非常熟悉的图(来自非常经典的 Git Flow 奠基论文:http://nvie.com/posts/a-successful-git-branching-model/):

  基于这个 Git Flow,我所认为的 Git 最佳实践,补充和修复了这么几点:
  1. 分支规则
  分支一共有5类,名称用 / 来区分是因为 SourceTree 里面 / 可以作为一个文件夹使用,命名标准为下面这样:
  master
  develop
  feature/***
  release/v13.5
  hotfix/v13.2

  本地的分支可以有一些其他的命名规则,没关系,但是推到远程的必须是这几种命名规范,最好一字不差,比如不要把>  2. 特殊情况
  此 Git Flow 唯一可以变通的地方为开发的时候非必须一定要用 feature 分支,比如说一个项目刚开始开发的时候,或者突然发现一个不是特别严重的 bug,我现在先修改下,想在下一个版本发的时候一起带出去,这种情况就在 develop 上面改就行了。
  3. 与标准Git Flow的差异

  与 Git Flow 的论文略微不同,我倡导的是:一个版本开发完成,需要提测的时候,由各个 feature 合并到 develop,然后在 develop 上开发自测,修复 bug,正式提测的时候,由 develop 迁出>  我个人认为这是一个非常良好的开发模型,伸缩性强,适用于各个规模的开发团队,一个人开发,我也会这么干,20个人的团队,也是没有任何问题的。关于这个模型,如果有任何疑问和更好的建议,都可以关注我的公众号(文章底部),大家一起学习。
  关于一些常见的问题和疑问,我在这里做下解释:
  1. 最经常问的,为什么忽略文件无效
  因为 Git 的忽略文件没有办法对已经纳入版本库的文件生效,解决办法:gitignore 里面添加完之后,把本地文件删了,然后 commit,push 上去,别人再更新,就OK了,下次还有这种类型的文件,就直接忽略了
  2. Git 可以添加项目中的文件夹权限控制吗
  不行,问这个问题的原因是因为很多人把 svn 的思维搬到 Git 上来,Git 并不是以文件夹为单位来组织的,所以现在大多数公司中UI的图片等资源,像 png,psd 等文件都是用的 svn 管理,代码用 Git 管理。想要用这种权限控制的话,很多人另辟捷径选择用 Git 的子模块和子树来处理,我感觉也是不太好
  3. 关于 Git 客户端

  我认为就两种选择,命令行和 SourceTree 等全局的客户端软件,TortoiseGit 根本不适用,原因就是 Git 不是以文件夹为组织单位的,TortoiseGit 是依托于文件管理器的操作,所以不对付。然后就是各种>  4. 关于 Git 代码回滚
  豪放派 reset:
  本地的分支先(reset)重置到一个 commit,然后:git push -f,强推,这种是属于删除 commit 历史的行为,而且强推需要权限,一般来说 master 分支默认都不让强推
  优点:彻底清除版本库上无用的代码,干净,但是做这种操作的同时,最好本地新建一个分支备份下代码
  缺点:误操作的代价比较大
  婉约派 revert:
  git revert HEAD~1(1代表从0到1,回退包含当前 commit 的两个 commit,然后会创建新的 commit)
  优点:所有历史都在,回退的做法为新建一个 commit 来回滚之前几个 commit 的代码
  缺点:回退几个 commit 这个需要手动计算,比较烦
  5. cherry pick 合并单个提交
  cherry pick 不能完全合并单个 commit,因为每个 commit 都是建立在前一个 commit 之上
  关于我:Android 和 JavaEE 开发工程师,运营有微信公众号"大土豆爱开发",原则“简单,分享”,涉及的内容包括但不限于 JavaEE,Android,Git 等,欢迎大家关注,共同学习。
  二维码:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434616-1-1.html 上篇帖子: 当git上文件名大小写重命名的修改时(git大小写敏感/默认不敏感),如何重命名并提交 下篇帖子: 源代码管理工具 git
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表