gpt4 book ai didi

bash - 使用git时如何查找所有空文件夹和未跟踪文件?

转载 作者:太空狗 更新时间:2023-10-29 14:02:52 29 4
gpt4 key购买 nike

基于 this postthis 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

那么我的问题是:如何列出所有未跟踪的文件和空文件夹

最佳答案

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创建一个目录,你需要在里面 stash 一个文件。由于 Git 管理的程序需要能够忽略名为 .gitignore 的文件, 这是一个很好的文件名,可以放在这样的目录中。你可以写*进入该文件,并将其添加到您的提交中,以便 Git 将创建目录并写入 .gitignore那里的文件包含 * , 因此将自动忽略该目录中所有其他未跟踪的文件。

旁注:一般来说,当 Git 从某个目录中 pull 出最后一个文件 时,它也会删除该目录,但偶尔我会看到它留下一些。 (当然,如果它仍然包含一些未跟踪的文件,它必须将目录留在后面。请注意 git clean -fd 将删除空目录,但它也会删除未跟踪的文件。)

关于bash - 使用git时如何查找所有空文件夹和未跟踪文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54048489/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com