如何在Git项目中引入外部仓库模块,不合并代码且独立提交?
解决方案:使用Git子模块(Git Submodule)
你之前尝试的merge操作会将两个仓库的代码合并,这不符合需求。Git子模块是专门解决这类场景的工具——它允许你在主项目(PROJECT)中嵌入一个独立的Git仓库(MODULE),主仓库仅记录子模块的版本引用,不会包含子模块的代码历史,同时两个仓库可以独立提交、推送修改。
操作步骤
1. 清理之前的配置
先移除之前添加的MODULE远程仓库(子模块会自行管理自身的远程):
git remote remove MODULE
2. 添加子模块到主项目
将MODULE仓库作为子模块添加到主项目的指定目录(比如modules/my-module,可自行修改路径):
git submodule add [module URL in Github] modules/my-module
执行后,主项目中会生成两个关键文件:
.gitmodules:记录子模块的配置信息(远程地址、本地路径等)modules/my-module:一个指向子模块当前版本的引用文件
3. 提交主项目的配置变更
把这两个文件提交到主项目仓库,完成子模块的接入:
git add .gitmodules modules/my-module git commit -m "Add MODULE as submodule" git push origin master
日常操作:在两个仓库间切换修改
操作MODULE仓库
进入子模块目录后,你可以像操作独立Git仓库一样进行修改、提交、推送:
# 进入子模块目录 cd modules/my-module # 拉取MODULE仓库的最新代码 git pull origin master # 提交修改到MODULE仓库 git add . git commit -m "Fix module bug" git push origin master
更新主项目中的子模块版本
当MODULE仓库的版本更新后,主项目需要记录这个新的版本引用:
# 回到主项目根目录 cd ../.. # 提交子模块的版本变更 git add modules/my-module git commit -m "Update MODULE to latest version" git push origin master
克隆包含子模块的项目
如果其他人克隆你的主项目,需要加上--recurse-submodules参数来同时拉取子模块代码:
git clone --recurse-submodules [PROJECT仓库URL]
如果已经克隆了主项目,也可以手动初始化并拉取子模块:
git submodule init git submodule update
内容的提问来源于stack exchange,提问作者amira
相关产品推荐
相关产品推荐

