华为云大咖说-如何利用Git提升研发效率?

孔皮皮 发表于 2019/08/25 14:37:09 2019/08/25
【摘要】 近十年,研发工具链发生了变化,Git逐渐成为主流。如何使用Git提高研发效率对企业和团队来说十分关键。本次直播课程就如何学习Git、如何选取适合的有代码检视的工作流等进阶Git技巧进行了讲解。

主讲人:华为iSource团队技术专家,《Git权威指南》作者 蒋鑫

image.png

十年来研发工具链的变化

  • 传统的研发管理平台,是工具的松散的整合——>现在是各个系统深度整合。

  • 以前研发工具链的核心是缺陷跟踪、需求管理工具——> 如今Github这类代码检视工具成为核心,


这种变化与团队的组织架构变化有关, 十年前,角色定位清晰,界限分明,比如:开发、测试、运维、产品管理、用户。但现在,技术的进步使这种界限逐渐模糊,比如:敏捷、CI构建、测试驱动开发使开发和测试的界限模糊;比如:DevOps让开发和运维的界限模糊;用户的身份也发生了变化,源码开放,让用户从需求的提出方成为解决方案的参与方。

在这种变化中,Git逐渐成为了主流。

为什么是Git

  1. 更加自由

    *  人人皆可使用,人人皆可贡献。(对开源项目的推广尤为重要)

    *  任何时间、任何地点都可贡献。(开源贡献、移动办公、云服务)

  2. 更加安全

    *  分布式、多副本,降低存储介质损坏的风险。

    *  数据不可篡改,防黑客攻击。入侵服务器,无法更改仓库。

  3. 质量更高

    *  代码检视前置,在代码合入之前。

    *  历史提交可修改,精益求精的质量文化。

Git谱系图

Git 2005 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git真正被世人了解和接受是在2008Github的推出后。此后发生了基于Git的配置管理工具大爆发。2008年还有另外一个工具是Gerrit,它是谷歌开源的为安卓而生的Git工具。

image.png

如何做好代码检视

  1. 检视应该是对提交过程逐个提交的review,而不是对最终结果的review

  2. 一个提交的修改量要少,以防说不清提交说明。

  3. 要写提交说明,提交说明出错的话要修改。

  4. 提交说明中需要包含测试用例。

修改提交的常用Git语句及修正历史提交示例如下图:

image.png

image.png


如何掌握Git

  • 学习方法:Git数据结构、文件系统为线索,Git命令都是在操作他们。

  • 四类Git对象

    * 问题:没有提交的文件能够找回么?

    ——git add后的可能能找回(使用git fsckdangling objects

  • 分支、reflog

    *  问题:分支多了,是不是仓库空间占用变多了?

    —— 一个指针而已,不会占用很多空间。

    *  问题:误用了git reset等操作破坏了当前分支,如何修复?

    ——从log中找到之前的恢复。

    *  问题:为什么仓库做了裁剪,执行git gc,不见仓库变小?

    ——reflog中的历史提交没有丢弃。

  • DAG与三路合并

    *  问题:为什么提交回退(revert)、脏合并,导致合并中提交丢失?

image.png

切莫采用SVN一样的工作流

  • 抱怨:SVN提交只需要一个commit命令就够了,Git为什么要两个命令(git commitgit push)?

提出这个抱怨的用户一定是有两个地方做错了。一是把Git的工作流做错了,不应该用共享仓库式的工作流。另一种是不应该一次commit提交一次,而应该是多次commit一个特性提交一次。

  • 抱怨:我的提交被别人的强制推送(push--force)覆盖了。

出现这个问题就是因为采用了共享仓库式的开发。使用这种方式的AB可能会发生的问题如下图所示。如果使用共享仓库式,建议采用第三个方式。

image.png

包含代码检视的工作流

image.png

新的集中式工作流

华为内部采取的一种新的集中式工作流:

image.png

新的集中式工作流示例:

image.png

实践中可能遇到的问题

  • 选择合适的工作流

    *  提交说明规范。

    *  工作流规范。

    *  编译构建流程。

  • 精细代码授权

    *  代码私密性,Git不支持路径授权,而是更大粒度的仓库授权。

    *  所以,授权是仓库分仓的原因之一。

  • 大仓库管理

    *  历史文件清理:git filter-branch

    *  二进制文件管理:Git-LFS

    *  分而治之:分仓。

  • 多仓库管理

    *  子仓库过多(10个以上?)不要使用submodule。此时推荐使用Android风格的多仓库管理,由华为开发,叫做Git-MM

image.png

提问和解答

  1. 在非开源项目里,我不希望程序员或者产品经理之类的角色能拿到所有代码,要注意什么?

    答:将敏感的部分包括相关提交拿出来变成一个新的仓库,这个工具叫Git fit branch,具体可以查看电子版《Git权威指南》,见www.worldhello.net

  2. SVN的历史转到Git能否保留?

    答:可以保留,使用Git svn这个工具可以实现历史保留。

  3. 如何更有效的解决冲突?

    答:最好就是进行好的模块化设计,不要产生冲突。如果不可避免的发生了冲突,win上有很多代码合并工具。

  4. Git cherry-pick的原理是什么?

    答:可以理解为将需要拣选的提交做成一个patch,再重新打到需要拣选的新的分支上去。感兴趣的话可以去看一下源码。

  5. 如何说服bossSVN转到Git

    答:有很多策略,如:友商都用Git,用Git可以做代码review让代码质量更高,开源社区都在用GitSVN的维护成本高、安全风险大。

 

 

 

视频链接:https://m.qlchat.com/wechat/page/topic-intro?topicId=840000204169950

以上文字内容由【内容众创兴趣小组-孔皮皮】整理。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。