工作中git submodule 使用场景

80 阅读2分钟
问题背景

项目中为了保证服务器和客户端战斗逻辑和结果的一致性,将战斗逻辑单独抽取出来作为一个服务,服务器和客户端使用同一份代码逻辑,类似于两个平行世界互不干扰跑相同逻辑,只要保证输入和随机种子的一致性,最终就可以保证结果的一致性。

这份战斗逻辑的代码由客户端同事进行维护,这样给开发带来一个现实问题,即服务器在战斗外层进行必要逻辑开发时,势必要调用到战斗逻辑代码,客户端也要基于战斗逻辑做战斗表现上的开发,理论上后端仓库和前端仓库应该是两个不同的git仓库,两个不同的git仓库,却要使用共用的一份逻辑代码,在前期频繁提交更新代码的开发阶段,应该如何做呢?

解决方案

我们使用了git 的submodule, 它允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。这样做可以解决多个相关联的项目共享代码的问题。使用子模块,你可以保持项目之间的独立性,同时共享和重用代码。因此我们可以将需要共用的逻辑作为仓库独立出来,并且作为前端仓库和后端仓库的子模块,从而解决这个问题。

说明

假设公共逻辑假设为仓库C

前端项目为仓库A

后端项目为仓库B

项目之间的关系如下:

A
-- 目录1
-- 目录2
-- C 仓库文件目录

B
-- 目录1
-- 目录2
-- C 仓库文件目录

当子模块有提交时,子模块不会主动更新, 需要手动到对应目录用git pull更新下,或者用submodule 指令

git submodule init
git submodule update --remote