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

网友投稿 755 2022-05-29

十年来研发工具链的变化

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

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

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

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

为什么是Git?

更加自由

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

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

更加安全

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

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

质量更高

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

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

Git谱系图

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

如何做好代码检视

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

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

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

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

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

如何掌握Git?

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

四类Git对象

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

——git add后的可能能找回(使用git fsck和dangling objects)

分支、reflog

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

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

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

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

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

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

DAG与三路合并

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

切莫采用SVN一样的工作流

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

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

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

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

包含代码检视的工作流

新的集中式工作流

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

新的集中式工作流示例:

实践中可能遇到的问题

选择合适的工作流

*  提交说明规范。

*  工作流规范。

*  编译构建流程。

精细代码授权

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

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

大仓库管理

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

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

*  分而治之:分仓。

多仓库管理

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

提问和解答

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

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

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

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

如何更有效的解决冲突?

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

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

Git cherry-pick的原理是什么?

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

如何说服boss从SVN转到Git?

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

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

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

软件开发云

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从一个简单的Java单例示例谈谈并发(上)
下一篇:Go 语言入门很简单 -- 15. Go 并发基础知识 #私藏项目实操分享#
相关文章