作者回复: 第七篇文章会有一些相关讨论。希望对你能有些帮助。有问题继续讨论 :)
作者回复: 对的。不过一般中间哪一个pull是使用fetch。因为pull会自动merge。所以,
add /rm ->commit ->fetch ->rebase ->push
作者回复: 这篇文章有不错的权衡列表:
https://dev.to/pavanbelagatti/what-do-you-prefer-and-why-mono-repo-or-multiple-repositories-401b
从我的经验看,大仓的最大挑战是代码仓太大之后,会让很多操作性能下降。而git本身对代码仓中的子文件夹的支持不好。如果能克服这个挑战,使用大仓非常好!
一些推荐的解决办法:
https://www.perforce.com/blog/hth/multiple-git-repositories-whats-best-way-manage-them
作者回复: 非常好的答案!一点我的想法:
> ...首先是要改善团队文化,鼓励大家频繁提交,
这个推荐实时文章中的思路和办法
> ...而不是只在每天下班前提交一次...
是的。这个应该是做原子性的提交。做好一个马上就提交。而不是每天提一次的。另外,如果Commit比较大,可以每天都`git fetch; git rebase`一次,把最近一天的冲突在本地解决,然后继续在本地开发,直到commit 做完再提交
作者回复: 嗯,可以这么理解。测试能力越强,可以自动化保证质量的地方就更多,就可以更快!
作者回复: > Fb会做增量单元测试或自动化测试吗?
如果大仓不做增量测试增量检查的话,效率就会极低。所以FB大量使用这样的实践。在本地运行的测试和检查基本上全是增量的。流水线上的也有相当一部分是只运行增量检查。
> 她们包含部署和自动化测试的流水线的耗时大概是多少?
本地检查一分钟。本地就可以构建跟生产比较一致的环境。所以反馈效率很高。CI实践会长一些,大概一二十分钟。
作者回复: > ...但是上线以后,还是会存在没有考虑到的历史存量用户因为长期的业务累积...
作者回复: 这个问题答案我不是100%确定。应该是集成在工程里面随CI流程触发的。而且并不是每一个CI都触发,因为比较昂贵和耗时。
作者回复: 请参考对Weining Cao问题的回复。
作者回复: > 挑战在如何快速解决合并冲突。
开发人员自己解决。提交做到原子性有很大帮助。
> 如何快速同步开发机器的代码保持最新。
经常`git fetch; git rebase origin/master`。
> 还有如果测试失败如何快速回滚。
1. 减少入库时的测试失败:多使用本地测试
2. 入origin/master库之后不会滚。写修复提交再赶紧push上去。实在不行,`git revert`命令产生一个新提交push上去。
作者回复: 我见到比较有效的方法是通过职责定位解决:每个团队对自己的模块负责,并不要求测试覆盖率。就是这么简单的办法就很有效。
比如,如果模块A依赖于模块B,那么首先A的作者会有意愿写一些针对A调用B的集成测试,因为这样的自动化方便在A的开发过程中,确保A的运行正确。
同样的,如果发现B有问题,B的作者会有意愿给B写单元测试和接口测试。因为在A的测试失败找到是B的责任时,B的自动化测试可以节省B的作者的Debug时间。
这样的方式,你觉得在你的团队会有成效吗?
作者回复: 这个可能需要科学上网
作者回复: > 持续序列流水线中进去下一个节点的标准是什么,
所有的自动化测试通过。
> 实操中难点是,大家对自动化的结果没有信心,如何做到呢?
既然要使用流水线,我觉得只有逐步建设自动化测试。测试比较有效,大家才能真正用起来。否则这个流水线的价值就不大。
作者回复: 能举一个“线上故障都出现在一些没有预估到的流程”具体又脱敏的例子吗?
作者回复: 赞同加牛不辣的观点。补充一点,在小公司的时候,流程和规范应该比大公司少一些,更加灵活一些。
作者回复: 持续集成是在持续交付里面的。持续部署,要看具体语境中,持续部署具体怎么定义的(方法论的东西比较tricky)。