Git子模块:将子模块移动到存储库外部

时间:2013-02-26 10:44:44

标签: git git-submodules

通过输入

创建一个git子模块
git submodule add <repo> && git submodule init

我的.git / config已更改,并且还创建了一个新文件.gitmodules。似乎我可以将我的子模块移动到存储库内部以及存储库之外的特定文件夹中:

$ cat gitmodules

[submodule "sub_repo"]
path = sub_repo
url = <...>

但是当我尝试将我的存储库移动到我的父文件夹并更改我的.gitmodules

path = ../sub_repo

它似乎忽略了git update&#39;上的那个模块。或者&#39; git submodule foreach&#39;。

我在推理中的错误是什么?

非常感谢!

2 个答案:

答案 0 :(得分:2)

根本不支持,就是这样。子模块的重点是在另一个库中基本上有一个存储库。

如果您不想这样做,请不要使用子模块。只需克隆其他存储库。

答案 1 :(得分:2)

将子模块从其父存储库移出到独立目录中只需更新一些元数据。使用Git 2.4,步骤如下:

  1. 从repo开始,假设子模块位于my-submodule/

    mv my-submodule ../
    
  2. 删除子模块中的指针.git文件(注意它不是目录):

    rm ../my-submodule/.git
    
  3. 将子模块的真实git元数据移动到子模块的git存储库中:

    mv .git/modules/my-submodule/ ../my-submodule/.git
    
  4. 通过删除.git/config参数来编辑worktree文件,该参数之前指向了回购中的相对路径。

  5. 那就是它!此时,您的父级仓库将子模块显示为deleted,而子模块本身将正常工作(可以使用分离的HEAD,您可以将其重置为主模块)。

    也可以编辑父仓库中的.gitmodules文件,但我发现不执行此操作不会破坏任何内容,只要您提交已删除的内容子模块。

    如果有其他人知道更快的方法(例如实际的git命令),我就会全力以赴。