现代化程序开发笔记(13)——Git与Monorepo

本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将简要介绍代码版本管理利器Git,同时谈一谈Monorepo的工作方式。

代码版本管理工具

作为开发者,我们通常会遇到两种写代码的场景:一种是写一个简单的程序或者demo,也许就几行,顶多也就两三个文件,要么用于自己的测试,要么用于展示,总之没有什么重要性,而且用完就被删了;另一种情况则是和他人合作,一起写一个很大的项目,并且会长期维护。第一种情况并不需要什么,我们自己配好编辑器、编译器就OK了,而第二种情况,除了自己开发代码以外,还需要关注很多代码之外的事,而这些事,就需要许多别的工具来帮忙了。

在维护一个大型项目的时候,我们会有一些最基本的编写代码之外的需求:

  • 能够回滚代码
  • 能够和他人双工写不同文件的代码
  • 能够知道某处代码是谁写的

这些需求都是最基本也是必要的需求。回滚代码,就是指我们在编写代码的过程中,发现这个思路是彻底错误的,那么我们就需要回到写这些代码之前重来,再比如我们写完了代码以后发现这个需求被取消了,那么我们也需要回滚这些代码。而双工写不同文件,则是指我们和合作者一起合作写一个项目,如果我们和他写的文件不一样,那么从情理上来讲我们应该可以同时写,最终得到的效果就是他的文件得到了改变,我的文件也得到了改变,而不是他得等我写完才能写他的,而我也得等他写完才能写我的。

除此之外,还有许多关于版本、作者、合作的需求。解决这些需求的一个利器,就是Git。

Git

大多数代码版本管理工具的原理都很直观,每一次修改代码,都是一个新的代码版本。我们只需要同时保存所有代码版本就能实现回滚代码了,并且在提交代码版本的时候加上提交者的签名,就能知道某处代码是谁写的了。

根据这个原理,我们理清思路,写代码究竟意味着什么。我们写代码,就是:

  1. 从那些保存的所有版本信息中,找出最新的一版

  2. 对这一版进行修改

  3. 作为一个新版本提交到所有版本信息中

只要是使用我们上面思路进行版本控制的工具,都无外乎这种做法。

那么,Git又与别的代码版本管理工具有什么区别呢?最大的区别,就在1和3两步。看到1、3两步,我们会有一个疑问:所有版本的信息是储存在哪的?Git采用的是分布式存储,也就是说,这些所有版本的信息是存储在开发者电脑本地的,也就是我们项目中的.git目录中。我们要和他人合作,只需要一个服务器实时同步我们本地的版本信息,合作者从服务器上拉取即可。而SVN等其他集中式版本管理系统则不一样,所有版本信息只存储在服务器上,我们在本地的,只有最新的一个版本。这两者各有好处。

关于Git具体原理和常用的命令,在其官方编写的指南Pro Git中有非常清晰、易懂的讲解,在网上也有许多相关的文章,太多人讲过的东西我就不讲了。

Monorepo

我们在进行大项目的版本管理时,有一个问题,就是每次的版本信息,存储多少代码?这个看上去显而易见,不就是全部代码嘛。然而,有些情况下,是需要我们考虑的。比如说,我的博客,有后端、Web端、iOS端和Android端。每个端的代码并不是紧耦合的,每个端都可以看作一个单独的项目。那么,我们究竟是把所有的代码放在一个Git仓库中(称为Monorepo),还是每个端的代码单独放一个仓库呢?

我们知道,如果两个项目完全没有关系,一个是做快餐店的页面展示,一个是校园成绩管理系统,那么这两个项目必然不会放在同一个仓库中。而如果两个目录的代码很相关,一个是数据库连接,一个是根据数据库连接,返回服务器响应,那么这两个目录必然会在同一个仓库。只有我们上面那种,几个项目并不是完全没有关系,而是逻辑相关,但代码并不是紧耦合的情况,最需要考虑了。

我的博客代码是使用的Monorepo,而我发现,React, actix-extras等都是采用的Monorepo形式,而且有的甚至是以前是多仓库,后来改成Monorepo的。

总结而言,Monorepo的好处有许多。

第一,Monorepo可以方便代码回滚。在许多大型项目中,一个新的需求会同时要求前端和后端都修改。当这个需求不需要时,前端和后端可以同时直接回滚到之前的版本,而不是分别回滚,有可能产生版本差异。

第二,Monorepo不会导致代码太过分散。当我们寻找一个大项目所有相关的项目时,只需要找这一个repo就可以了。

第三,当使用Docker compose,Docker swarm等集群容器编排时,多个微服务的代码放在同一个仓库里有利于我们配置文件的编写和发布。

其实,Monorepo和多仓库这两种方案,对于我们这种小项目并没有什么区别。只有像Google、Facebook那样非常大的项目时,才需要审慎考虑选择哪种方案。我个人比较喜欢Monorepo的方案,因为这样更加简洁一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值