基于this post和this post,
git ls-files --others --exclude-standard
可以列出所有未跟踪的文件。
但是我测试了一下,无法列出空文件夹(已跟踪和未跟踪)。
例如,无法列出空文件夹archiver folder
如下:
.
├── admin.php
├── api
│ ├── index.htm
│ └── remote
│ └── mod
│ ├── index.htm
│ ├── mod_cron.php
│ └── mod_index.php
└── archiver folder
然后我的问题是:如何列出所有未跟踪的文件和空文件夹?
答案 0 :(得分:2)
TL; DR:仅查找空目录。您可以安全地删除它们-好吧,“安全”取决于您自己的软件,但是就 Git 而言,它是安全的。 (请注意缺少的文件,请参阅下面的“丢失”的定义,它可能会删除Git以后想要的目录,但这没关系,因为Git会再次创建它。)
在Unix / Linux系统上(已编辑以纠正转录中丢失的单词):
find . -name .git -prune -o -type d -empty -print
(在工作树的顶层)将找到空目录。
Git对文件夹/目录不感兴趣。没有跟踪文件夹,就没有跟踪文件夹一样:Git只关心文件。具体来说,文件位于索引中,也可以不在索引中,如果文件不在索引中,则该文件不会被跟踪。
当您使用各种选项列出未跟踪的文件时(由于您通常想要,它们往往会跳过那些未被跟踪和忽略的文件),因此Git有时会将所有某个文件夹中的文件,请注意该文件夹中没有 tracked 文件,并使用汇总符号进行报告。您可以使用git status --untracked-mode=all
停止此操作;那么您将获得各个文件名。
请注意,可能会跟踪某些文件,但缺少。例如,假设sub/README.txt
是一个跟踪文件,并且实际上存在。然后我们运行rm sub/README.txt
。文件sub/README.txt
保留在Git的索引中,而将保留在下一个提交中,但丢失了。如果那是您工作树中sub
中唯一的 文件,则sub
现在为空,您可以使用rmdir sub
将其删除。即使sub/README.txt
仍然丢失(并且sub
也丢失!),这也不影响下一次提交:它将 still 包含sub/README.txt
,因为该文件是在索引中。 (如果需要的话,也可以使用git rm --cached sub/README.txt
将其从索引中删除。)
如果并且当Git打算将sub/README.txt
从索引中复制回工作树时,Git此时将发现没有sub
。 Git只会耸耸肩,然后创建sub
目录,然后将sub/README.txt
放入其中。因此,这是为什么 Git对文件夹/目录不感兴趣的原因:它们只是枯燥乏味,仅在需要保存文件时才需要按需创建。
如果要Git创建目录,则需要在其中存储文件。由于由Git管理的程序需要能够忽略名为.gitignore
的文件,因此,将其粘贴到这样的目录中是一个很好的文件名。您可以将*
写入该文件,并将其添加到提交中,这样Git将创建目录并在其中写入包含.gitignore
的{{1}}文件,从而将忽略所有其他未跟踪的文件。目录中的文件。
侧面说明:通常,当Git从某个目录中提取最后一个文件 时,它也会删除该目录,但是偶尔我会看到它留下了一些内容。 (当然,如果它仍然包含一些未跟踪的文件,则必须将目录留在后面。请注意,*
会删除空目录,尽管它也会删除未跟踪的文件。)
答案 1 :(得分:1)
git ls-files --others --exclude-standard> not_tracked
find . -depth -empty -type d \( ! -regex '.*/\..*' \) >> not_tracked
请检查我的回答,我花了2天时间。
答案 2 :(得分:0)
命令ds
完全可以满足您的要求。