如何创建包含其他Git仓库引用的仓库?Git子模块是否适用于创建myExperiments仓库并关联已有GitHub项目的场景?
解决方案:创建包含独立Git仓库引用的仓库
Hey there! 你的需求刚好是Git子模块的典型适用场景——完全符合你要的「引用独立仓库、彼此无交互」的要求。下面我一步步给你讲怎么操作,以及为什么子模块是理想方案:
一、Git子模块是不是你的理想方案?
绝对是!原因如下:
- 子模块允许你在主仓库(myExperiments)中嵌入多个独立的Git仓库,每个子模块都保留自己完整的提交历史、分支和配置
- 被引用的仓库之间完全独立,不会有任何自动交互,除非你主动修改它们的依赖关系
- 主仓库仅记录每个子模块当前指向的提交哈希,不会把子模块的代码合并到主仓库中,保持仓库结构干净简洁
- 对于你的「仅引用实验项目」的需求,子模块的维护成本极低,完全能满足需求
二、创建myExperiments仓库并添加子模块的步骤
1. 初始化本地myExperiments仓库
先在本地创建文件夹并初始化Git:
mkdir myExperiments cd myExperiments git init
如果需要关联GitHub远程仓库,先在GitHub上创建一个空的myExperiments仓库,然后执行:
git remote add origin <你的myExperiments仓库GitHub地址>
2. 添加子模块到仓库
对于每个你要引用的实验项目,使用git submodule add命令,格式为:
git submodule add <实验项目的GitHub仓库URL> <本地存放的目录名>
举个例子:如果你的实验项目仓库是https://github.com/your-username/experiment-image-processing.git,想把它放在myExperiments里的image-exp文件夹,就执行:
git submodule add https://github.com/your-username/experiment-image-processing.git image-exp
重复这个命令,把所有需要引用的实验项目都添加进来。
执行后,Git会自动生成两个关键文件:
.gitmodules:记录所有子模块的配置(远程URL、本地路径等)- 每个子模块的路径条目:记录该子模块当前对应的提交哈希
3. 提交并推送配置
把这些子模块配置文件提交到myExperiments仓库:
git add .gitmodules image-exp/(替换成你的子模块目录) git commit -m "Add submodules for all experiment projects" git push origin main
4. 其他人克隆仓库的注意事项
当其他人克隆你的myExperiments仓库时,默认只会拿到子模块的配置文件,不会自动拉取子模块的代码内容。需要执行以下命令来初始化并拉取子模块:
git clone <你的myExperiments仓库GitHub地址> cd myExperiments git submodule init git submodule update
或者更简洁的一步到位命令:
git clone --recurse-submodules <你的myExperiments仓库GitHub地址>
三、子模块日常维护小提示
如果后续某个实验项目有更新,你想在myExperiments中同步到最新版本,可以进入对应子模块目录拉取代码,然后回到主仓库提交新的提交哈希:
cd image-exp git pull origin main cd .. git add image-exp git commit -m "Update image-exp submodule to latest version" git push origin main
内容的提问来源于stack exchange,提问作者Tim fontes
相关产品推荐
相关产品推荐

