2014-11-05 134 views
9

我有一个git子模块,我想成为我的主要项目的一部分(因为我有很多项目特定的代码将进入子模块)。删除git子模块,但保留文件

所以我想删除对子模块的git引用并将这些文件添加到我的主git存储库。

但是如何?

+0

只是递归删除'.svn'文件夹 – Raptor 2014-11-05 08:22:24

+0

这似乎是http://stackoverflow.com/questions/1759587/un-submodule-a-git-submodule – Chad 2015-04-15 17:27:59

回答

12

必须在您的索引中移除gitlink entry

mv subfolder subfolder_tmp 
git submodule deinit subfolder 
git rm --cached subfolder 
mv subfolder_tmp subfolder 
git add subfolder 

更换subfolder与您的辅助模块中的文件夹的名称,并确保不添加任何尾随的斜杠。

这就是我在“Remove a Git submodule?”和“un-submodule a git submodule”中详细介绍的内容。

--cached选项允许您保留磁盘中的子文件夹内容...除了git submodule deinit无论如何都已经删除了该内容。因此mv部分。

然后您可以添加并提交该子文件夹。

+2

的副本,但'''git submodule deinit subfolder'''删除子文件夹内容从磁盘。 '''--cached'''选项不做任何事情,因为内容已经消失了。 (git 1.9.2) – 2015-01-22 14:12:08

+0

@ and-dev --cached从索引中删除,而不是从磁盘中删除。 – VonC 2015-01-22 14:40:20

+1

我发现deinit命令将子文件夹放回为空目录。然后,mv将temp子文件夹放入新的空目录中,而不是重命名它。所以在做最后的mv之前检查目录。否则,做了这份工作。 – Jason 2017-05-04 16:32:47

0

从VonC答案将进行删除,除非首先重命名物理文件夹的子模块文件夹的内容 - 如在这个答案,他的问题被指出是重复乍得:

https://stackoverflow.com/a/16162228

+0

已接受的答案已更新以反映这些问题。 – Louth 2017-02-20 00:20:49