You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何`git submodule add`将Git信息存储于父仓库.git中?如何规避?

Git子模块存储逻辑与独立目录配置

为什么子模块会关联存储在父仓库?

  • Git子模块的设计初衷是让父仓库能追踪外部依赖仓库的特定版本,默认情况下,Git会把子模块的版本数据(提交对象、分支信息等)集中存放在父仓库的.git/modules目录下,这是一种空间优化策略——避免每个子模块都重复存储完整的Git对象库。
  • 子模块目录下的.git是一个文本文件而非文件夹,它本质是一个路径链接,指向父仓库.git/modules里对应子模块的存储位置,告诉Git从哪里读取该子模块的版本信息。

如何配置子模块拥有独立的.git文件夹?

方法1:添加子模块时直接指定独立Git目录

使用--separate-git-dir参数,在添加子模块时就指定其.git文件夹的位置,示例命令:

git submodule add --separate-git-dir ./my-submodule/.git https://github.com/example/repo.git ./my-submodule

执行后,my-submodule目录下会生成独立的.git文件夹,子模块的版本数据会直接存在这个目录里,和你期望的结构一致。

方法2:迁移已添加的子模块

如果已经完成子模块添加,可按以下步骤调整:

  1. 进入子模块目录:
    cd ./my-submodule
    
  2. 将父仓库中该子模块的Git数据移动到子模块目录下:
    mv ../../.git/modules/my-submodule .git
    
  3. 编辑子模块的.git/config文件,修正core.worktree路径为相对子模块.git的工作目录路径(比如设置为../)
  4. 返回父仓库,修改.gitmodules文件,删除对应子模块的gitdir配置项,然后执行同步:
    git submodule sync
    

内容的提问来源于stack exchange,提问作者adelriosantiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:57:04