使用 git 管理多项目的最佳实践? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
smdbh
V2EX    git

使用 git 管理多项目的最佳实践?

  •  
  •   smdbh 2024 年 3 月 30 日 3168 次点击
    这是一个创建于 673 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景: 一份公共代码,所有项目的基础。 每个项目在公共代码的基础上,增加应用代码。 每个项目需要修改公共代码的某些地方(修改地方不确定,实现回调的成本过高,感觉直接修改更简单些) 代码无权限管理要求

    我现在想到两个方法:

    1. 一个大仓库,公共代码是主分支,项目开分支。但感觉项目多了分支太多不简洁。
    2. 每个项目单独仓库,用 subtree 引入公共代码。感觉缺点是 subtree 本身需要命令行操作, GUI 没有支持。对应公共代码显示不直观(对应公共仓库哪个 tag 啥的)。

    大家看到这个需求,倾向哪个方法,或是其他合理的实现?

    16 条回复    2024-04-01 15:30:18 +08:00
    lanmiao
        1
    lanmiao  
       2024 年 3 月 30 日
    submodule
    LongMaoz
        2
    LongMaoz  
       2024 年 3 月 30 日
    2. submodule 将公仓库码作为所有项目仓库的子仓库
    amon
        3
    amon  
       2024 年 3 月 30 日
    submodule 用起来很恶心,但是听起来不用 submodule 更恶心,哈哈。
    smdbh
        4
    smdbh  
    OP
       2024 年 3 月 30 日
    @lanmiao submodule 无法修改,所以才换 subtree 的
    Helsing
        5
    Helsing  
       2024 年 3 月 30 日 via iPhone   1
    分支多又不影响,又不是拿来看的
    用 Git Flow 模式开发的大团队,每个版本每人开一个 feature 分支,那分支多的不要不要的,这不是很正常,又不会影响协作
    Inn0Vat10n
        6
    Inn0Vat10n &nbp;
       2024 年 3 月 30 日
    " 每个项目需要修改公共代码的某些地方" 你的意思是,公共代码也有多版本,不同子项目依赖不同版本的公共代码?
    darksword21
        7
    darksword21  
    PRO
       2024 年 3 月 30 日
    如果是 go 可以放在同一个 workspace 下
    例如
    /workspace/project-a
    /workspace/project-b
    /workspace/pkg
    jasonlamvt
        8
    jasonlamvt  
       2024 年 3 月 31 日
    submodule ,我现在公司的 node 项目非常恶心,只能用 submodule 来引入一些后实现的公共库,你可以结合 ci 来实现其他项目的更新
    lrh3321
        9
    lrh3321  
       2024 年 3 月 31 日
    subtree
    pxiphx891
        10
    pxiphx891  
       2024 年 3 月 31 日
    不能把公共部分打成二方包吗
    ikas
        11
    ikas  
       2024 年 3 月 31 日
    参考 aosp 源码管理.

    我们是自己写了一个简化的脚本,加上一个精简的项目配置文件 manifest.xml

    manifest.xml 包含了每个模块/项目的分支信息..
    smdbh
        12
    smdbh  
    OP
       2024 年 3 月 31 日
    @Inn0Vat10n 公共代码主要是 sdk 和硬件相关,实际不同项目配置会有修改,就要改源码。只是改源码配置和相关代码比较快,自己再封装独立比较花时间
    m1nm13
        13
    m1nm13  
       2024 年 4 月 1 日
    还是公共代码作为 submodule,至于要修改公共代码的部分,说明这个公共代码不那么公共,继续提取公共部分,差异部分抽象出接口由项目单独实现
    realJamespond
        14
    realJamespond  
       2024 年 4 月 1 日
    公共库用 rsync ,其它就是正常 git 库
    uliah
        15
    uliah  
       2024 年 4 月 1 日   1
    如果 #13 做不到 , 又不想用 submodule , 可以尝试分支管理来解决:
    main 主线 , 不打 TAG
    stable/1.0 标品,TAG 1.0.x
    custom/1.0-project1.x 项目分支,TAG 1.0-project.x
    stable/1.1 标品,TAG 1.1.x
    custom/1.1-project2.x 项目分支,TAG 1.1-project.x

    需要注意问题:
    1 、对分支管理和产品规划要求较高:
    - 一个 fix 需要合并多个 stable 和 custom
    - custom 的修改可以作为 feat 合回主线, 并应用到其他项目
    ...
    2 、每个版本最好有维护时间,不然会多到离谱
    3 、不要在敏捷上尝试这种方案
    johnhuangemc2
        16
    johnhuangemc2  
       2024 年 4 月 1 日   1
    公共项目如果足够稳定, 建议做成依赖库供其它项目引入.
    如果不够稳定, 各项目需要改动其中的内容, 那独立管理成一个代码仓库项目来管理标准版本, 其它项目从它直接 Copy 到项目中用, 重大修改再手工维护到标准版本仓库中.
    submodule 虽然兼具版本管理方便引用, 但使用起来坑巨多, 没经过训练还容易把 submodule 的版本给搞乱了. 同时对 ci/cd 工具及各云平台的 ci/cd 功能不友好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2164 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 12:18 PVG 20:18 LAX 04:18 JFK 07:18
    Do have faith in what you're doing.
    ubao msn 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