如何使git只列出文件夹中跟踪的目录?

如何使git只列出文件夹中跟踪的目录?,git,Git,使用git list files可以为我提供目录和其中跟踪的文件。是否有类似以下命令: git list-directories 或者类似的东西,只列出被跟踪的非空非递归目录名?我想这会给你你想要的: git ls文件| xargs-n 1 dirname | uniq 因此,将gitls文件的输出导入dirname,然后uniq结果。这对我来说似乎在本地有效 git ls-tree -rt HEAD:./ | awk '{if ($2 == "tree") print $4;}' 如果文件

使用
git list files
可以为我提供目录和其中跟踪的文件。是否有类似以下命令:

git list-directories

或者类似的东西,只列出被跟踪的非空非递归目录名?

我想这会给你你想要的:

git ls文件| xargs-n 1 dirname | uniq

因此,将
gitls文件的输出
导入
dirname
,然后
uniq
结果。这对我来说似乎在本地有效

git ls-tree -rt HEAD:./ | awk '{if ($2 == "tree") print $4;}'
如果文件可能包含空格,我们将不得不使用:这不是很有趣

-r
使其递归,而
-t
使其在递归时打印树,这在默认情况下是关闭的

我无法使用中提到的
ls-tree
,因为很难处理没有文件的目录,只有其他目录

这种方法也显示了


在Git 2.19.0上测试。

可能不会。Git跟踪文件,而不是目录。不过,您可能可以通过
list files
命令以某种方式派生出该信息,并定义一个符合您要求的git别名。@AJED32谢谢,然后我就这样做了。酷。一旦你弄明白了,一定要在这里发布一个答案,以方便将来可能会有相同问题的其他人。我会做一个sed,
…|sed s,/[^/]*$,|uniq
,避免
xargs-n1
对我来说似乎是一个很好的经验法则。@CDub:这也给出了子目录。不过仍然有用。你为什么不想要子目录?@CDub:我正在跟踪定义模拟测试用例的目录。有很多子目录。当我用来设置测试的参数在数量和值上有很大差异时,我创建了另一个测试并开始用git跟踪它,在这种情况下,我没有将它定义为同一目录的另一个版本。一旦算法启动并运行,我需要决定保留哪些测试,所以我需要做一些清理:所以我只想列出顶级目录,看看我是否正在跟踪所有目录,或者哪些目录没有被跟踪。我相信这会遗漏没有文件的目录,只有其他目录。这里有一种方法也考虑了它们: