运行git clean是否会对将来的结账产生某种永久性影响?

时间:2012-07-19 22:03:36

标签: git

我有一个非常简单的git存储库,我一直在用它来学习git。除了master之外,我还有两个分支; javafxnetty。我在每个分支中创建了一个新的项目模块。对于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目录。但是,如果我重新签出netty分支而不重新生成我的IDEA项目,Git删除javafx目录没有问题。

在我的IDE阻止这些目录被删除一次后,它们会永久地作为我本地仓库中未跟踪的文件挂起,直到我运行git clean -fd。即使关闭我的IDE并在分支之间切换也不会改变任何东西。

如果我克隆存储库并检查分支而没有启动我的IDE,一切都像我期望的那样工作。当我签出一个新分支时,将删除不相关的目录。

如果另一个进程阻止它在签出新分支时删除不需要的文件,Git会如何反应?

1 个答案:

答案 0 :(得分:2)

来自git-help的手册页

  

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

     

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

     

如果给出任何可选的...参数,则只会影响这些路径。

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

我怀疑你是否已开始在其中一个分支中错误地跟踪这些生成的文件。