Git diff表示子项目很脏

我刚刚运行了一个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

这是什么意思? 我如何解决它?


正如Mark Longair的博客文章Git Submodules Explained所述,

git的1.7.0及更高版本在git子模块的行为中包含一个恼人的变化。
如果子模块具有任何修改的文件或未跟踪的文件 ,则子模块现在被认为是脏的 ,而以前只有在子模块中的HEAD指向错误的提交时才会出现这种情况。

加号(的意思+ Git中的子模块的输出)发生了变化,并在第一时间,你遇到这一点,需要一点时间看,通过更改日志或使用Git平分上找出什么错误,例如git.git找到变化。 对于“在指定的版本中,但是脏的”引入不同的符号,用户会更加友善。

你可以通过以下方式解决它

  • 在回到父回购站(diff应该不再报告“脏”文件)之前,在每个子模块中提交或撤消更改/发展。 要撤消对子模块的所有更改,只需cd进入子模块的根目录并执行git checkout .

    dotnetCarpenter评论说你可以做一个: git submodule foreach --recursive git checkout .

  • 或者在你的git diff添加--ignore-submodules ,暂时忽略那些“脏”的子模块。

  • Git 1.7.2版新增功能

    正如下面的Noam注释,这个问题提到,自从git版本1.7.2以后,您可以忽略脏子模块:

    git status --ignore-submodules=dirty
    

    也删除子模块,然后运行git submodule initgit submodule update显然会做的伎俩,但可能并不总是适当或可能的。


    这是因为您对子模块的指针不是子模块目录中的实际指针。 要解决这个问题,你必须再次运行git submodule update

    链接地址: http://www.djcxy.com/p/92373.html

    上一篇: Git diff says subproject is dirty

    下一篇: Run git pull over all subdirectories