如何处理多团队跨语言.proto 管理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
litchinn
V2EX    问与答

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

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

    所以,直接复制一份也没啥问题,你现在的痛苦不是“复制 proto”带来的
    erquren
        2
    erquren  
       362 天前   1
    .proto 应该是一个单独的仓库啊,大家拉了生成自己语言的代码
    Pdk5a8759cbeD6CH
        3
    Pdk5a8759cbeD6CH  
       362 天前
    每个服务应该要有一个独立的 proto 仓库。比如服务 1 有一个 proto1 的仓库,专门存放生成好的 pb 代码,如果服务 2 需要调用服务 1 就 go get proto1 就可以了。这样子所有的服务业务仓库都不会有 proto 代码。
    litchinn
        4
    litchinn  
    OP
       362 天前
    @FabricPath 开发阶段我觉得哪怕觉得某个字段名字不合适改个名字这种都很正常吧,release 后才会考虑版本前后兼容问题
    litchinn
        5
    litchinn  
    OP
       362 天前
    @erquren 现在是想准备用一个仓库放,但是还得拉下来挪进项目里再生成代码感觉有点麻烦,总之就是既想使用便捷又想更改便捷
    litchinn
        6
    litchinn  
    OP
       362 天前
    @dylanqqt go 的好像可以这样,java 的应该也可以作为外部依赖引用进来,但是不知道有啥办法能同时兼容这俩语言乃至 python
    Pdk5a8759cbeD6CH
        7
    Pdk5a8759cbeD6CH  
       362 天前
    @litchinn 如果不能兼容的话可以写个脚本推到 git 的时候同时推到 java 的依赖库,go 就直接 go get java 就从依赖库引用
    aihimmel
        8
    aihimmel  
       362 天前 via Android   1
    git submodule
    JimLee0921
        9
    JimLee0921  
       362 天前
    你的头像也是用的 notionavatarmaker 生成嘛?哈哈哈
    csys
        10
    csys  
       362 天前 via Android   1
    我所知道的绝大多数工程实践都是用的 git submodule ,可以参考一些多语言的开源项目,比如 temporal
    mb4555
        11
    mb4555  
       362 天前
    写个脚本 原始文件一个目录 不同语言的分各自的目录
    mb4555
        12
    mb4555  
       362 天前
    @mb4555 #11 全都放同个仓库
    litchinn
        14
    litchinn  
    OP
       362 天前
    @tuolee666 是的,作者当时在本站宣传的 /t/804653
    litchinn
        15
    litchinn  
    OP
       362 天前
    @aihimmel @csys 那我还是去研究下 submodule 看怎么实现
    so1n
        16
    so1n  
       361 天前
    全部放同一个仓库,这个仓库使用 make 命令来生成代码,不同语言的代码放在不同的目录
    Charlie17Li
        17
    Charlie17Li  
       361 天前 via iPhone
    @tuolee666 牛的好用
    povsister
        18
    povsister  
       361 天前
    单独一个仓库,开发 proto 先行,聊需求聊技术方案都拿着 proto 来说话。
    接入使用云端 buf package 专门按 commit hash/分支托管产物,或者 java 这种可以本地 submodule+build 。
    ericFork
        19
    ericFork  
       361 天前
    一个仓库生成各个语言用的包,然后下游各语言的服务用依赖包的方式引入
    sujin190
        20
    sujin190  
       361 天前 via Android   1
    既然如此为什么不在放 proto 文件的项目直接生成并发布各个语言的 sdk 包呢,私仓加自动发布就好了啊
    flmn
        21
    flmn  
       361 天前
    git submodule 已经是一个好方案了,不必东奔西走了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5244 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 09:20 PVG 17:20 LAX 02:20 JFK 05:20
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86