我有一个非常简单的 git 存储库,我一直在用它来学习 git。除了 ; 我还有两个分支master
;javafx
, netty
. 我在每个分支中创建了一个新的项目模块。对于netty
分支,项目布局如下所示:
sandbox
netty
对于javafx
分支,项目布局如下所示:
sandbox
javafx
每当我过去在分支之间切换时,我的工作目录中仍然会有来自另一个分支的目录。我经常切换分支,额外的目录从未被删除。我决定我应该学会正确地清理我的工作目录,在netty
分支上,我跑了:
git clean -fd
它完全符合我的预期,但现在 Git 的结帐行为似乎有所不同。当我从netty
分支切换到javafx
分支时,就像以前一样;额外的netty
目录保留在我的工作目录中。但是,现在当我从javafx
分支切换到netty
分支时,javafx
目录会自动删除/清理。
但是,如果我在另一台机器上克隆 repo,它仍然可以像以前那样工作;所有未跟踪的文件都留在我的工作目录中。git clean -fd
有某种永久性的影响吗?
编辑:玩了一些之后,我意识到这与我的 IDE(IntelliJ IDEA)有关。当我检查另一个不包含这些项目模块的分支时,Git 似乎无法删除活动项目模块的目录。
例如,如果我在我的netty
分支上并签出该javafx
分支,Git 似乎无法删除该netty
目录。但是,如果我重新签出分支而不重新生成我的 IDEA 项目,Git 删除目录netty
没有问题。javafx
在我的 IDE 阻止这些目录被删除一次后,它们将作为未跟踪的文件永远存在于我的本地存储库中,直到我运行git clean -fd
. 即使关闭我的 IDE 并在分支之间切换也不会改变任何事情。
如果我在没有启动 IDE 的情况下克隆存储库并签出分支,一切都会像我预期的那样工作。当我签出一个新分支时,不相关的目录将被删除。
如果另一个进程阻止它在签出新分支时删除不需要的文件,Git 会如何反应?