Protobuf生成的代码多工程共享

使用Git作为版本控制系统,多工程引用中间代码文件,本示例引用对象为Protobuf生成的代码。

方案一(不推荐)

使用 git submodule:git仓库里的仓库

需要引入Protobuf生成的中间代码的git仓库:ServerProject ClientProject

中间代码仓库:Protobuf-Java

proto文件仓库:Data-Proto


例:将protoc生成的Java代码推送到Protobuf-Java工程中,然后使用git submoduleProtobuf-Java工程引入到ServerProject工程中作为子仓库,此时就包含两个git仓库一个外层的ServerProject一个里层的Protobuf-Java,当需要操作外层仓库的时候只需要进入对应的目录即可,可执行任何git操作都不会对里层的子仓库造成影响。当proto说明文件发生了变化,在本地重新编译生成新得代码然后将他推送到远程的Protobuf-Java仓库中,我们只需要cd到Protobuf-Java子仓库的目录下执行git pull就可以将新更新的内容拉取到当前的子仓库中,即实现代码引用ServerProject也就可以使用。

示意图

请输入图片描述

缺点

  • 外层仓库分支和里层仓库分支切换繁琐
  • 文件安全性,如果Protobuf-Java被拉取下来然后进行了更该后,又重新pull上传到了远程的Protobuf-Java仓库,那么后面的人拉取Protobuf-Java仓库就会产生问题

方案二(推荐)

使用 git subtree,他和git submodule的项目结构一样都会拥有:

需要引入Protobuf生成的中间代码的git仓库:ServerProject ClientProject

中间代码仓库:Protobuf-Java

proto文件仓库:Data-Proto


使用git subtree也是Protobuf-Java的代码拉取到ServerProject 仓库中,唯一不同的是他不会创建一个子仓库,而是将Protobuf-Java/中间仓库于需要引用他的仓库进行文件合并(合并之前会产生一个新的提交),ServerProject始终是一个仓库。

其它

也可以将中间生成的代码进行打包,将他部署到私服中然后让需要引用的项目加入其依赖,(版本号修改繁琐)