V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
litchinn
V2EX  ›  问与答

如何处理多团队跨语言.proto 管理

  •  
  •   litchinn · 65 天前 · 1105 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在项目中使用 protobuf 作为消息体,多个团队开发多个服务,有些是 go 有些是 java ,目前的.proto 文件在每个仓库里都有一份,维护起来很痛苦,有没有什么好的方案呢,github 的 submodules 能解决这个问题吗
    20 条回复    2024-10-15 10:20:20 +08:00
    FabricPath
        1
    FabricPath  
       65 天前
    对新增的 API 或者字段没有需求的情况下,为啥要更新 proto...
    如果整个经常需要所有引用方更新 proto ,那先问一下改 proto 的人为什么不能做到前后兼容。

    所以,直接复制一份也没啥问题,你现在的痛苦不是“复制 proto”带来的
    erquren
        2
    erquren  
       65 天前   ❤️ 1
    .proto 应该是一个单独的仓库啊,大家拉了生成自己语言的代码
    dylanqqt
        3
    dylanqqt  
       65 天前
    每个服务应该要有一个独立的 proto 仓库。比如服务 1 有一个 proto1 的仓库,专门存放生成好的 pb 代码,如果服务 2 需要调用服务 1 就 go get proto1 就可以了。这样子所有的服务业务仓库都不会有 proto 代码。
    litchinn
        4
    litchinn  
    OP
       65 天前
    @FabricPath 开发阶段我觉得哪怕觉得某个字段名字不合适改个名字这种都很正常吧,release 后才会考虑版本前后兼容问题
    litchinn
        5
    litchinn  
    OP
       65 天前
    @erquren 现在是想准备用一个仓库放,但是还得拉下来挪进项目里再生成代码感觉有点麻烦,总之就是既想使用便捷又想更改便捷
    litchinn
        6
    litchinn  
    OP
       65 天前
    @dylanqqt go 的好像可以这样,java 的应该也可以作为外部依赖引用进来,但是不知道有啥办法能同时兼容这俩语言乃至 python
    dylanqqt
        7
    dylanqqt  
       65 天前
    @litchinn 如果不能兼容的话可以写个脚本推到 git 的时候同时推到 java 的依赖库,go 就直接 go get java 就从依赖库引用
    aihimmel
        8
    aihimmel  
       65 天前 via Android   ❤️ 1
    git submodule
    JimLee0921
        9
    JimLee0921  
       65 天前
    你的头像也是用的 notionavatarmaker 生成嘛?哈哈哈
    csys
        10
    csys  
       65 天前 via Android   ❤️ 1
    我所知道的绝大多数工程实践都是用的 git submodule ,可以参考一些多语言的开源项目,比如 temporal
    mb4555
        11
    mb4555  
       65 天前
    写个脚本 原始文件一个目录 不同语言的分各自的目录
    mb4555
        12
    mb4555  
       65 天前
    @mb4555 #11 全都放同个仓库
    litchinn
        14
    litchinn  
    OP
       65 天前
    @tuolee666 是的,作者当时在本站宣传的 /t/804653
    litchinn
        15
    litchinn  
    OP
       65 天前
    @aihimmel @csys 那我还是去研究下 submodule 看怎么实现
    so1n
        16
    so1n  
       65 天前
    全部放同一个仓库,这个仓库使用 make 命令来生成代码,不同语言的代码放在不同的目录
    Charlie17Li
        17
    Charlie17Li  
       65 天前 via iPhone
    @tuolee666 牛的好用
    povsister
        18
    povsister  
       65 天前
    单独一个仓库,开发 proto 先行,聊需求聊技术方案都拿着 proto 来说话。
    接入使用云端 buf package 专门按 commit hash/分支托管产物,或者 java 这种可以本地 submodule+build 。
    ericFork
        19
    ericFork  
       65 天前
    一个仓库生成各个语言用的包,然后下游各语言的服务用依赖包的方式引入
    sujin190
        20
    sujin190  
       65 天前 via Android   ❤️ 1
    既然如此为什么不在放 proto 文件的项目直接生成并发布各个语言的 sdk 包呢,私仓加自动发布就好了啊
    flmn
        21
    flmn  
       64 天前
    git submodule 已经是一个好方案了,不必东奔西走了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3132 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:25 · PVG 21:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.