2013-02-26 107 views
2

创建一个git子模块后,通过键入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的更新”或“git的子模块的foreach”该模块。

什么是我的错误推理吗?

非常感谢!

回答

2

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

如果你不希望这样做,不要使用子模块。简单地克隆其他存储库。

+1

我没有看到可以理解的原因。我想将我目前的项目状态引用到外部回购的状态。我不需要它在我的仓库中。无论如何。可能它将在未来得到支持 – 2013-02-26 10:53:31

+0

@JohnRumpel:可能不会。 git只能在其存储库的文件夹中写入,所以它无法在克隆上创建该子模块。 – 2013-02-26 11:05:53

+1

所以我必须写我自己的叉子。 flexibleGit ;-) – 2013-02-26 11:37:21

1

移动一个子模块出其母公司回购到一个独立的目录只涉及一些更新的元数据。使用Git 2.4,操作步骤如下:

  1. 从回购开始,假设子模块中my-submodule/

    mv my-submodule ../ 
    
  2. 辅助模块(注意,它不是删除指针.git文件“T目录):

    rm ../my-submodule/.git 
    
  3. 移动为辅助模块中的真正的Git元到子模块的git仓库:

    mv .git/modules/my-submodule/ ../my-submodule/.git 
    
  4. 编辑.git/config文件通过去除worktree参数,它先前指向回购内的相对路径。

就是这样!此时,您的父回购将显示子模块为deleted,而子模块本身将正常工作(可以使用分离的HEAD,您可以重置为主)。

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

如果任何人知道一个更快的方法来做到这一点(如一个实际的Git命令),我会洗耳恭听。

+0

谢谢,这工作得很好!后来我跟着John Douthat的回答在这里(http://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule)从原始回购中删除子模块。 – pedrovgp 2016-06-28 17:34:16