删除git子模块但保留文件

Ask*_*bar 26 git

我有一个git子模块,我想成为我的主项目的一部分(因为我有很多项目特定的代码将进入子模块).

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

但是怎么样?

Von*_*onC 45

您必须删除索引中的gitlink条目:

mv subfolder subfolder_tmp
git submodule deinit subfolder
git rm --cached subfolder
mv subfolder_tmp subfolder
git add subfolder
Run Code Online (Sandbox Code Playgroud)

替换subfolder为子模块的文件夹名称,并确保不添加任何尾部斜杠.

这是我在" 删除一个Git子模块? "和" un-submodule一个git子模块 "中详述的内容.

--cached选项允许您将子文件夹内容保留在磁盘中...除非git submodule deinit已经删除了该内容.因此这mv部分.

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

  • 我发现deinit命令将子文件夹放回到一个空目录中.然后mv将temp子文件夹放入新的空目录,而不是重命名它.所以在做最后的mv之前检查目录.否则,做了这个工作. (3认同)
  • 但```git submodule deinit子文件夹```从磁盘中删除子文件夹内容.由于内容已经消失,```--cached```选项什么都不做.(git 1.9.2) (2认同)

Joe*_*ely 16

首先从子模块中删除 .git 文件夹。

只需运行此命令即可从 git 中删除缓存的文件夹和内容,但不会删除该文件夹。

git rm -r --cached [EnterFolderNameWithoutBrackets]
Run Code Online (Sandbox Code Playgroud)

  • 应该是公认的答案。我还会添加删除 .gitmodules 并编辑 .git/config 以删除子模块的条目,尽管我不确定这是必要的。 (3认同)