如何在不知道Git仓库URL的前提下将其添加到另一个仓库
你操作时收到的提示含义是当前仓库检测到子目录中存在独立的Git仓库,默认不会将该子目录的内容纳入当前仓库的版本管理:
warning: adding embedded git repository: [my repository] hint: You've added another git repository inside your current repository. hint: Clones of the outer repository will not contain the contents of hint: the embedded repository and will not know how to obtain it. hint: If you meant to add a submodule, use: hint: hint: git submodule add <url> [my repository]
问题解答
1. 使用原克隆URL添加子模块是否会丢失本地修改
会。submodule机制是绑定对应远程仓库的特定提交记录,你本地未推送到原上游仓库的修改仅存在于本地副本中,使用原URL添加子模块时,只会拉取原上游仓库的公开提交,你的本地修改不会被包含在内。
2. 如何将带修改的本地副本作为子模块加入新仓库
如果你需要保留每个子仓库的独立提交历史,方便后续版本管理或同步更新,可按以下步骤操作:
- 为每个修改后的本地Git仓库单独创建对应的私有远程仓库(可在你使用的Git托管平台操作)
- 进入每个本地子仓库目录,将所有本地修改提交后,推送到你刚创建的对应私有远程仓库
- 回到主仓库目录,执行
git submodule add <你自己的私有仓库URL> [子仓库文件夹路径]即可,此时子模块会关联你包含修改的私有仓库,不会丢失本地改动
3. 删除子文件夹下的.git文件作为普通文件夹添加是否可行
该方案完全可行,适合不需要保留子仓库独立提交历史、后续不需要跟进原上游仓库更新的场景。
- 操作注意事项:
- 删除子文件夹内的
.git目录后,需要先执行git rm --cached [子仓库文件夹名]清除主仓库中已缓存的嵌入式仓库记录,避免残留报错 - 之后再正常执行
git add [子仓库文件夹名]、git commit即可将所有修改后的文件作为主仓库的一部分提交
- 删除子文件夹内的
- 优缺点说明:
- 优点:操作简单,克隆主仓库时会直接拉取所有文件,不需要额外处理子模块拉取逻辑
- 缺点:原每个子仓库的提交历史会被清除,后续无法直接和原上游仓库同步更新
内容的提问来源于stack exchange,提问作者darkchoco
相关产品推荐
相关产品推荐

