12

通过键入创建 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”或“git submodule foreach”上的那个模块。

我在这里推理的错误是什么?

非常感谢!

4

2 回答 2

9

将子模块从其父 repo 中移出到一个独立的目录只涉及更新一些元数据。使用 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参数先前指向 repo 中的相对路径。

而已!此时,您的父 repo 会将子模块显示为deleted,而子模块本身将正常工作(可能使用分离的 HEAD,您可以将其重置为 master)。

也可以.gitmodules在父 repo 中编辑文件,但我发现不这样做不会破坏任何东西,只要您提交已删除的子模块。

如果其他人知道执行此操作的更快方法(例如实际的 git 命令),我会全神贯注。

于 2016-05-11T02:12:42.417 回答
6

根本不支持,仅此而已。子模块的重点基本上是在另一个存储库中拥有一个存储库。

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

于 2013-02-26T10:47:06.883 回答