Protobuf生成的代码多工程共享
使用Git作为版本控制系统,多工程引用中间代码文件,本示例引用对象为Protobuf生成的代码。
方案一(不推荐)
使用 git submodule:git仓库里的仓库
需要引入Protobuf生成的中间代码的git仓库:ServerProject
ClientProject
中间代码仓库:Protobuf-Java
proto文件仓库:Data-Proto
例:将protoc生成的Java代码推送到Protobuf-Java
工程中,然后使用git submodule
将Protobuf-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
始终是一个仓库。
其它
也可以将中间生成的代码进行打包,将他部署到私服中然后让需要引用的项目加入其依赖,(版本号修改繁琐)