TL; DR:仅查找空目录。您可以安全地删除它们-好吧,“安全”取决于您自己的软件,但是就Git而言,它是安全的。(请注意缺少的文件,请参阅下面的“丢失”的定义,这可能会删除Git以后想要的目录,但这没关系,因为Git会再次创建它。)
在Unix / Linux系统上(已编辑以纠正转录中丢失的单词):
find . -name .git -prune -o -type d -empty -print
(在工作树的顶层)将找到空目录。
Git对文件夹/目录不感兴趣。没有跟踪文件夹的方式与没有跟踪文件夹的方式相同:Git只关心文件。具体来说,文件位于索引中,也可以不在索引中,如果文件不在索引中,则该文件不会被跟踪。
当您使用各种选项列出未跟踪的文件(由于您通常希望跳过未跟踪和忽略的文件)时,Git有时会将某个文件夹中的所有文件汇总在一起,请注意在该文件夹中没有被跟踪的文件,并使用汇总符号报告它们。您可以使用例如停止此操作git status --untracked-mode=all
;那么您将获得各个文件名。
请注意,可能有一些文件被跟踪,但是丢失了。例如,假设sub/README.txt
是一个跟踪文件,并且实际上存在。然后我们跑rm sub/README.txt
。该文件sub/README.txt
遗体在Git的索引,将在未来的承诺,但它缺少。如果那是您的工作树中唯一的文件sub
,sub
则现在为空,您可以使用删除它rmdir sub
。尽管sub/README.txt
遗体失踪(和sub
!也消失),不影响下一个承诺:将仍然包含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
在其中写入一个包含的文件*
,从而自动忽略该目录中所有其他未跟踪的文件。
旁注:通常,当Git从某个目录中提取最后一个文件时,它也会删除该目录,但是偶尔我会看到它留下了一些内容。(当然,如果它仍然包含一些未跟踪的文件,则必须将目录留在后面。请注意git clean -fd
,尽管它还会删除未跟踪的文件,但将删除空目录。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句