当`git ls-files --others`时如何列出空文件夹?

时间:2019-01-30 12:15:18

标签: git

基于git manual

  

-无空目录
    不要列出空目录。没有--directory无效。

然后我认为 git ls-files --others将列出空文件夹

我的系统是带有git 1.8.3的centos 7.4
在仓库中测试如下:

[root@localhost www]# git status
# On branch test
nothing to commit, working directory clean
[root@localhost www]mkdir test12345
[root@localhost www]git ls-files --others
[root@localhost www]git status
# On branch test
nothing to commit, working directory clean

运行test12345时似乎没有列出空文件夹git ls-files --others

我的问题:
1。git ls-files --others时如何列出空文件夹?
2. --no-empty-directory的用途是什么?

2 个答案:

答案 0 :(得分:1)

您错过了该部分没有--directory无效。

git ls-files -o --directory

git ls-files -o --directory --no-empty-directory

但不是

git ls-files -o --no-empty-directory

答案 1 :(得分:1)

有一种“空目录”,即使使用--no-empty-directory仍会列出:嵌套git存储库(gitlink条目,索引中的特殊gitdir条目)。

在Git 2.29(2020年第四季度)之前,“ ls-files -o”处理了当前工作树中挂起的另一个git工作树的顶级目录。

请参见commit ab282aacommit ed8268dElijah Newren (newren)(2020年8月12日)。
(由Junio C Hamano -- gitster --commit 11f433f中合并,2020年8月24日)

dir:避免过早将非裸存储库标记为匹配项

报告人:克里斯蒂安w
简化的测试用例和二等分方法:Kyle Meyer
签名人:伊利亚·纽伦

非存储库是特殊目录。
与我们可能会递归到其中列出文件的普通目录不同,非裸仓库必须自己匹配,然后我们始终只报告非裸仓库目录本身,而不报告其任何内容。

另外,当遍历目录以查找未跟踪或排除的文件时,我们通常会考虑匹配指定路径规范或不匹配它们的路径。

但是,do_match_pathspec()使用一个名为MATCHED_RECURSIVELY_LEADING_PATHSPEC的特殊值,这意味着“此目录与任何pathspec不匹配,但可能在其下面有文件或目录。”
这个特殊的值使我们无法过早地认为某个目录及其下的所有内容都不相关,而且还使我们能够与“这是一个匹配项”区分开来。

这两个特殊情况的组合以前未被发现。
在测试套件中添加一个测试以覆盖它,并确保如果最匹配的存储库是MATCHED_RECURSIVELY_LEADING_PATHSPEC,则我们返回一个非匹配存储库作为不匹配项。