我刚刚运行了一个git diff,我得到以下输出的所有我的大约10个子模块

diff --git a/.vim/bundle/bufexplorer b/.vim/bundle/bufexplorer
--- a/.vim/bundle/bufexplorer
+++ b/.vim/bundle/bufexplorer
@@ -1 +1 @@
-Subproject commit 8c75e65b647238febd0257658b150f717a136359
+Subproject commit 8c75e65b647238febd0257658b150f717a136359-dirty

这是什么意思?我该怎么解决呢?


当前回答

之所以会出现这种情况,是因为子模块的指针并不是子模块目录中的实际内容。要解决这个问题,你必须再次运行git子模块update:

其他回答

要忽略任何子模块中所有未跟踪的文件,使用以下命令忽略这些更改。

git config --global diff.ignoreSubmodules dirty

它将添加以下配置选项到您的本地git配置:

[diff]
  ignoreSubmodules = dirty

更多信息可以在这里找到

之所以会出现这种情况,是因为子模块的指针并不是子模块目录中的实际内容。要解决这个问题,你必须再次运行git子模块update:

如果启用了文件模式设置,并且您更改了子模块子树中的文件权限,则子模块可能被标记为脏。

要禁用子模块中的文件模式,可以编辑/。Git /modules/path/到/your/submodule/config并添加

[core]
  filemode = false

如果你想忽略所有脏状态,你可以在/中设置ignore = dirty属性。gitmodules文件,但我认为最好只禁用文件模式。

我最终删除了子模块目录,并再次初始化它

cd my-submodule
git push
cd ../
rm -rf my-submodule
git submodule init
git submodule update

同样,删除子模块,然后运行git子模块init和git子模块update显然也可以达到这个目的,但可能并不总是合适的或可能的。