我有两个程序,它们在不同的项目中,但是它们复用了一部分头文件,它们在两个不同的git仓库中,有什么好的办法可以让它们复用吗?

为什么提到这个点,因为我修改程序a中的头文件,其实程序b中相关的头文件也需要同步修改,但是它们在两个仓库中,所以,容易出现疏漏

跨仓库共享头文件的方案

你遇到的问题本质上是代码复用与同步的问题,而且是在两个独立 Git 仓库之间。下面按推荐程度从高到低给出几种方案。

我的一个想法:

使用共同的头文件:然后目录名称也都一样,可以手动对比两个仓库中头文件的差异。


方案一:抽出公共库(最推荐)

把共享的头文件抽成一个独立的仓库,作为第三方依赖引入。

cpp 复制代码
common-headers/          (独立 git 仓库)
├── include/
│   ├── foo.h
│   └── bar.h
└── CMakeLists.txt

project-a/               (git 仓库 A)
project-b/               (git 仓库 B)

有待进一步思考和实践

方案二:Monorepo(如果条件允许)

把 A、B 和公共头文件放到同一个仓库里:

cpp 复制代码
monorepo/
├── common/include/
├── project-a/
└── project-b/
  • 优点:改一处,两边天然同步;重构、搜索、CI 都简单

  • 缺点:仓库变大,权限粒度粗,迁移成本高

  • 适用:A、B 本来就是同一团队/同一产品线

方案三:Git Subtree(不想用 submodule 的折中)

cpp 复制代码
git subtree add --prefix=third_party/common-headers \
    git@xxx/common-headers.git main --squash
  • 优点:公共代码直接以普通文件形式存在仓库里,clone 的人无感知

  • 缺点:同步需要手动 git subtree pull/push,比 submodule 更"重"

方案四:自动化检测(作为兜底)

无论用哪种方案,都建议加一道CI 防线,防止两边漂移:

  1. 哈希校验:在 A、B 的 CI 里计算公共头文件的 hash,与"官方版本"比对,不一致就报警。

  2. 定时同步检查 :CI 定时任务 diff 两边公共头文件,有差异发通知。

  3. 强制走公共库 :如果头文件已经在公共库,直接在 A、B 里删除本地副本,只允许从公共库引入------从物理上杜绝"两份拷贝"。

第 3 点是最根本的:只要还存在两份拷贝,就一定会漂移。

待思考和实践。

相关推荐
greatofdream2 小时前
git rebase时如何解决merge节点冲突问题
大数据·git·elasticsearch
敲敲敲-敲代码17 小时前
git安装记录
git
我是人✓17 小时前
Git入门:从零开始掌握分布式版本控制
分布式·git
Aurora_eye19 小时前
Git 笔记
笔记·git
解道Jdon19 小时前
FigCraft把Figma用Rust从零重写了一遍
ide·windows·git·svn·eclipse·github·visual studio
橙橙笔记21 小时前
QT安卓软件的制作
android·git·qt·软件
我是人✓1 天前
Git远程协作与标签管理全攻略
git
闰土_RUNTU1 天前
Git实用手册(持续更新)
git
Shaoshing1 天前
ggggggggit
git