仅清理未跟踪的目录

问题描述

如果我重命名一些目录,然后提交并推送到源,然后从另一台计算机拉出,我会发现旧目录和新目录。在旧目录中会有一些被忽略的文件。如何删除所有此类未跟踪目录,而不触及任何已跟踪目录中的任何文件(已跟踪或未跟踪)。

(“被跟踪目录”是指至少包含一个被跟踪文件的目录。)

解决方法

您可能在关注git clean -X

来自git-scm

-X

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

这是一个示例,其中一个文件被跟踪,一个未压缩,一个被忽略。

$ ls
x.txt  y.txt  z.txt

$ cat .gitignore
y.txt

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        z.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git clean -X --dry-run
Would remove y.txt

$ git clean -Xf
Removing y.txt

$ ls
x.txt  z.txt

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        z.txt

nothing added to commit but untracked files present (use "git add" to track)

,

试试这个:

git clean -d -fx

-d:告诉 git clean 你还想删除任何未跟踪的目录,默认情况下它会忽略目录。
-f:强制选项启动从当前目录中实际删除未跟踪文件。
-x:告诉 git clean 还包括任何被忽略的文件。

,
git clean -dX

-d 选项会导致 git-clean 递归进入未跟踪的目录。

-X 选项会导致 git-clean 删除被忽略的文件。

您还可以指定要清理的目录:

git clean -dX myDirectory

您可以先通过添加 -n 选项尝试试运行。试运行实际上并没有删除任何东西,它只是显示将要做什么。

git clean -dXn