Git checkout/pull不会删除目录?

mcu*_*ulp 78 git git-clean

我有我的回购@github.我在家做了一些工作并把它推到了github.它涉及一些文件和目录的删除.现在我在我的工作箱上,它在删除文件和目录之前有一份代码副本.

我发布了以下内容:

git remote update
git checkout HEAD
git pull origin HEAD
Run Code Online (Sandbox Code Playgroud)

它删除了它应该拥有的所有文件,但没有删除文件所在的目录.

两个问题:

  1. 为什么不删除目录?
  2. 我可以在当前状态下发出git命令来删除它们吗?

mip*_*adi 147

Git不跟踪目录,因此它不会删除由于合并或其他更改而变为空的目录.但是,您可以使用git clean -fd删除未跟踪目录(该-fd标志意味着˚F奥尔塞去除未跟踪文件和d irectories).

  • 但是当然,首先用`-n`(干运行)而不是`-f`运行命令,这样你就可以看到将被删除的内容.特别是因为`git clean -d`不会删除_only_那些令人厌恶的目录,而且还会删除未跟踪的文件. (18认同)
  • 我糊涂了.那么为什么当我提交/推送更改时,目录会从我的GitHub仓库中删除? (4认同)
  • 它可能与GitHub repos是_bare_存储库(它们没有工作副本)这一事实有关,但是你的本地存储器确实存在.我想如果你从GitHub原点克隆了一个_new_ repo,你就不会有这些目录了. (4认同)
  • 工作副本中的目录可能包含未跟踪的文件(包括隐藏的未跟踪文件),因此它们可能看起来是空的,但实际上不是空的,因此 Git 没有删除它们。当然,`git clean` 会。 (2认同)
  • @EliGolin:除非你传递了 `-x` 选项,`git clean` 不会删除 .gitignore 中列出的文件。 (2认同)

Yog*_*rtu 9

我遇到了同样的问题,就我的构建服务(CI)而言。由于 GIT 会在不清理文件夹的情况下提取所有文件,因此以前由 CI 构建的所有 bin / obj 都是脏的,所以如果我删除测试项目,则 bin仍将包含 DLL 并会提及不存在的测试。

为了解决这个问题;这个命令似乎可以解决问题(至少对我来说)

git clean -fd -x
Run Code Online (Sandbox Code Playgroud)

其中 X 将删除所有未跟踪的文件:

-X 仅删除被 Git 忽略的文件。这对于从头开始重建所有内容可能很有用,但保留手动创建的文件。

  • 小心这一点... `-x` 清除了我想要的日志(在远程服务器上本地,只是不在 Git 中),但被 `.gitignore` 忽略,因为它们经常更改 (2认同)