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

52 天前
 smdbh

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

我现在想到两个方法:

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

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

1927 次点击
所在节点    git
16 条回复
lanmiao
52 天前
submodule
LongMaoz
52 天前
2. submodule 将公仓库码作为所有项目仓库的子仓库
amon
52 天前
submodule 用起来很恶心,但是听起来不用 submodule 更恶心,哈哈。
smdbh
52 天前
@lanmiao submodule 无法修改,所以才换 subtree 的
Helsing
52 天前
分支多又不影响,又不是拿来看的
用 Git Flow 模式开发的大团队,每个版本每人开一个 feature 分支,那分支多的不要不要的,这不是很正常,又不会影响协作
Inn0Vat10n
52 天前
" 每个项目需要修改公共代码的某些地方" 你的意思是,公共代码也有多版本,不同子项目依赖不同版本的公共代码?
darksword21
52 天前
如果是 go 可以放在同一个 workspace 下
例如
/workspace/project-a
/workspace/project-b
/workspace/pkg
jasonlamvt
51 天前
submodule ,我现在公司的 node 项目非常恶心,只能用 submodule 来引入一些后实现的公共库,你可以结合 ci 来实现其他项目的更新
lrh3321
50 天前
subtree
pxiphx891
50 天前
不能把公共部分打成二方包吗
ikas
50 天前
参考 aosp 源码管理.

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

manifest.xml 包含了每个模块/项目的分支信息..
smdbh
50 天前
@Inn0Vat10n 公共代码主要是 sdk 和硬件相关,实际不同项目配置会有修改,就要改源码。只是改源码配置和相关代码比较快,自己再封装独立比较花时间
m1nm13
50 天前
还是公共代码作为 submodule,至于要修改公共代码的部分,说明这个公共代码不那么公共,继续提取公共部分,差异部分抽象出接口由项目单独实现
realJamespond
50 天前
公共库用 rsync ,其它就是正常 git 库
uliah
50 天前
如果 #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
50 天前
公共项目如果足够稳定, 建议做成依赖库供其它项目引入.
如果不够稳定, 各项目需要改动其中的内容, 那独立管理成一个代码仓库项目来管理标准版本, 其它项目从它直接 Copy 到项目中用, 重大修改再手工维护到标准版本仓库中.
submodule 虽然兼具版本管理方便引用, 但使用起来坑巨多, 没经过训练还容易把 submodule 的版本给搞乱了. 同时对 ci/cd 工具及各云平台的 ci/cd 功能不友好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX