0

我有一个非常简单的 git 存储库,我一直在用它来学习 git。除了 ; 我还有两个分支masterjavafx, 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 会如何反应?

4

1 回答 1

2

从 git-help 的手册页

从当前目录开始,通过递归删除不受版本控制的文件来清理工作树。

通常,只删除 git 未知的文件,但如果指定了 -x 选项,也会删除忽略的文件。例如,这对于删除所有构建产品很有用。

如果给出任何可选的 ... 参数,则只有那些路径受到影响。

本质上git clean -fd会删除本地副本中所有未跟踪的文件和目录,但 .gitignore 中忽略的文件除外。

我怀疑您已经开始在其中一个分支中错误地跟踪那些生成的文件。

于 2012-07-19T22:14:35.913 回答