我刚刚运行了一个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无关,但是我看到了相同的错误消息,以及子模块的脏状态。
根本原因是。git文件夹中的一些文件是root拥有的,所以git没有写访问权,因此git不能改变子模块的脏状态时,我的用户运行。
你也有同样的问题吗?
从存储库的根文件夹中,使用find列出根目录下的文件[可选]
find .git -user root
解决方案(Linux)
将.git文件夹中的所有文件更改为您的所有者
sudo chown -R $USER:$USER .git
# alternatively, only the files listed in the above command...
sudo find .git -user root -exec chown $USER:$USER {} +
这是怎么发生的?
在我的例子中,我在docker容器的子模块中构建了库,docker守护进程传统上以root身份运行,因此创建的文件属于root:root所有权。
我的用户通过代理通过该服务拥有根权限,所以即使我没有做任何事情,我的git存储库仍然有根拥有的更改。
我希望这能帮到某人,离开这里。
编辑:这个答案(和其他大多数答案)已经过时了;请参阅Devpool的答案。
最初,没有配置选项使“git diff——ignore-submodules”和“git status——ignore-submodules”成为全局默认值(但也请参阅设置命令上的git默认标志)。另一种方法是在你想要忽略的每个子模块上设置一个默认的忽略配置选项(对于git diff和git状态),可以在.git/配置文件中(仅在本地)或.gitmodules中(将由git进行版本控制)。例如:
[submodule "foobar"]
url = git@bitbucket.org:foo/bar.git
ignore = untracked
Ignore = untracked忽略未跟踪的文件,Ignore = dirty也忽略已修改的文件,Ignore = all也忽略提交。
显然没有办法为所有子模块通配符。