我有两个程序,它们在不同的项目中,但是它们复用了一部分头文件,它们在两个不同的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 点是最根本的:只要还存在两份拷贝,就一定会漂移。

待思考和实践。

相关推荐
全栈陈序员35 分钟前
【Git】从入门到精通(五)—— git add:将文件加入暂存区
大数据·git·elasticsearch
全栈陈序员3 小时前
【Git】从入门到精通(七)—— git status:查看仓库状态
大数据·git·elasticsearch
莫晓燚8 小时前
Ansible 13 个常用模块---企业实战
git·github
无言听风雨丶14 小时前
Kubernetes GitOps 持续交付实战:用 Argo CD 让 Git 成为集群事实源
git·elasticsearch·kubernetes
全栈陈序员15 小时前
【Git】从入门到精通(六)—— git commit:提交到版本库
大数据·git·elasticsearch
全栈陈序员1 天前
【Git】从入门到精通(一)—— Git简介:什么是版本控制系统
大数据·git·elasticsearch
大猫会长1 天前
git笔记
git
克里斯蒂亚诺更新2 天前
git引入其他分支并且合并
git
全栈陈序员2 天前
【Git】从入门到精通(二)—— Git安装与初次配置
数据仓库·git
XLYcmy2 天前
实验报告分析评价文档——《第四次阶段汇报:模型产物的仓库瘦身、云端部署与评测链路打通》评析
git·llm·cpu·gpu·反编译·反汇编·safetensors