Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git-两个不同分支中的不同子模块_Git_Git Submodules - Fatal编程技术网

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

Git-两个不同分支中的不同子模块,git,git-submodules,Git,Git Submodules,我的超级项目有两个分支——master和dev。我最初在这两个分支中都有一个子模块,但现在我只需要将它保留在dev分支中。为此,我切换到主分支并将其从那里移除(按照说明)。现在,每次我从dev分支切换到master分支时,都会收到一条消息,说警告:无法rmdir path/to/submodule:Directory not empty。此外,每次我在主分支中执行git status,git都会在未跟踪文件下列出子模块 有没有办法告诉git不要抱怨这个子模块?我尝试将子模块路径添加到主分支中的.

我的超级项目有两个分支——master和dev。我最初在这两个分支中都有一个子模块,但现在我只需要将它保留在dev分支中。为此,我切换到主分支并将其从那里移除(按照说明)。现在,每次我从dev分支切换到master分支时,都会收到一条消息,说警告:无法rmdir path/to/submodule:Directory not empty。此外,每次我在主分支中执行
git status
,git都会在未跟踪文件下列出子模块

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


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

关于如何删除子模块的详细说明,请参见:

大多数试图删除子模块的用户都会遇到以下问题:

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


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

  • 不修改
    .git/config
    :这是所有repo(及其所有分支)使用的本地配置:因此这里没有
    git子模块deinit
    (这只清理
    .git
    中关于子模块的内容)
  • 删除以下文件中的子模块条目:
    • .gitmodules
      文件(您可以在不同的分支中拥有该文件的不同内容)
    • 索引:
      gitrm--cached path_to_submodule
      (无尾随斜杠):同样,您只在一个分支中进行修改

对不起,我匆忙回答了我的问题;我仍在寻找答案。该页面中描述的过程不会从我的两个分支中删除子模块吗?我仍然希望子模块存在于我的开发分支中。此外,
子模块deinit
命令的描述似乎只是@VarunVats的包装。当然,我编辑了我的答案以解决您的具体问题。是的,这正是我所做的。我没有从
.git/config
文件中删除子模块部分。我的问题是,每次我从
dev
分支切换到
master
分支时,都会收到一条警告消息:无法rmdir path/to/submodule:Directory not empty。此外,每次我在主分支中执行git status时,git都会在未跟踪文件下列出子模块。有什么方法可以删除这些消息吗?@VarunVats关于git状态,您可以添加一个.gitignore(仅在主分支中)以忽略(先前)子模块的根目录。