Git - 两个不同分支中的不同子模块

时间:2013-06-22 05:45:46

标签: git git-submodules

我的超级项目有两个分支 - master dev 。我最初在这两个分支中都有一个子模块,但现在我需要将它保留在 dev 分支中。为此,我切换到 master 分支并从那里删除它(按照outlined here的说明)。现在,每当我从 dev 分支切换到 master 分支时,我都会收到一条消息,说明警告:无法rmdir path / to / submodule:目录不为空即可。此外,每次我在 master 分支中git status时,git都会列出Untracked文件下的子模块。

有没有办法可以告诉git不要抱怨这个子模块?我尝试将子模块路径添加到主分支中的.gitignore,但这似乎没有帮助。另外,我很好奇为什么当一个文件夹存在于一个分支而不存在于另一个分支中时,git不会抱怨,但是当一个子模块存在于一个分支而不存在于另一个分支中时,它会发生什么?

编辑:我在删除子模块时没有删除.git/config文件中的相关部分,因为我仍然希望它在开发分支中。

1 个答案:

答案 0 :(得分:1)

您有关于如何删除this answer中的子模块的更完整说明:

使大多数尝试删除子模块的用户绊倒的是:

git rm --cached path_to_submodule (no trailing slash)

这是因为它们通常删除了(简单的OS rm命令,而不是git rm命令)子模块的路径,这意味着它不再可见。
然而,它仍然记录在索引中。


如果您只需要删除一个分支中的子模块(并将其保留在另一个分支中),那么您需要:

  • 不要修改.git/config :这是所有repos(及其所有分支)使用的本地配置:所以这里没有git submodule deinit(只清除其中的内容)关于子模块的.git
  • 删除子模块条目:
    • .gitmodules文件(您可以在不同的分支中使用该文件的不同内容)
    • 索引:git rm --cached path_to_submodule(没有尾部斜杠):再次只对一个分支进行修改。