- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
基于 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
那么我的问题是:如何列出所有未跟踪的文件和空文件夹?
最佳答案
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/
我有一个名为 FeedView 的 View ,由 FeedViewController 处理。 我还有一个名为“NearestStore”的 XIB,它由一个名为“NearestStoreViewC
我有一个警报表,其中 tr 元素是使用 JS 动态添加/删除的。问题是它有一个 border-top 将它与上面的内容分开,当表格为空时我想隐藏这些内容。我试过 :empty 和 display:no
我是一名优秀的程序员,十分优秀!