Git出现警告:无法删除目录

13

我正在使用更新为创作者更新的Windows 10上的git bash。

每当我尝试在分支之间切换时,我会得到以下提示:

$ git fetch && git checkout master
warning: unable to rmdir Ionic_Developemnt: Directory not empty
Checking out files: 100% (6312/6312), done.
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

我不知道为什么会发生这种情况,Ionic_Development文件夹中还有一个隐藏的.git文件夹。

有人能帮忙解决一下这个错误吗?

4个回答

19

warning: unable to rmdir on git checkout 表示您正在切换到一个不存在该目录的分支;git 尝试删除它,但有一些临时文件 git 无法删除;该目录不为空,所以 git 也无法将其删除,因此会出现警告。


将代码推送到服务器时会对其产生多大影响? - Akshay Shrivastav
2
不,Git 不会推送文件,Git 推送的是提交(以及它们的树和 blob)。本地存储库中的临时未提交文件永远不会被推送。 - phd

7

找到了答案:不要使用git checkout,而是使用git checkout --recurse-submodules

使用git config submodule.recurse true告诉Git始终使用--recurse-submodules(仅适用于Git版本2.14+),如果只在本地项目级别上使用,请添加--local

原因:此问题发生在(Git < 2.13)中,当git checkout不能正确处理那些子模块时。

参考资料:https://github.com/gitextensions/gitextensions/issues/2966#issuecomment-622666568


原始答案:

实际上,我认为这个答案部分正确 :O

如果一个文件夹被本地的.git跟踪,则在切换分支时,它将根据.git进行更改(例如从我们的角度删除,如果另一个分支没有此文件夹)。

如果一个文件夹被.gitignore忽略,则在切换分支时,该文件夹将保持不变。

但是,如果文件夹是子模块,则由子模块.git跟踪,本地.git尝试在切换分支时使用rmdir,这导致了问题。


4
这通常发生在文件仍在使用时。我个人在使用Atom编辑器时有时会遇到这种情况。尝试关闭编辑器,以及任何正在监听更改的编译器,并再次尝试检出。

1
没有任何东西是打开的,一切都关闭了,我只有在Windows上打开了Git Bash,我甚至检查了服务,但仍然没有任何东西。 - Akshay Shrivastav

-6

我知道这篇文章有点老了,但如果有人像我一样偶然发现了它,也许你正在切换到另一个分支并且你有一个Git子模块。在目录中查找.git隐藏文件夹,如果你不需要它作为子模块,可以将其删除--但在切换之前一定要将该文件夹提交到当前分支的父存储库中。

rm -r .git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接