Git 查找空的、未被忽略的目录

Git 查找空的、未被忽略的目录,git,Git,我想在我的repo中的所有空目录中添加一个.gitcept文件,但在被忽略的目录中不添加文件。我已经可以找到具有以下内容的空目录: $ find . -type d -empty 但我怎么才能知道哪些被忽略了呢?可以直接忽略它们,或者忽略目录的子目录。。。有没有办法直接从git获取这些信息?比如: $ find . -type d -empty | git classify --stdin ignored : xxx non-ignored : yyy 太好了。您可以使用此任务

我想在我的repo中的所有空目录中添加一个
.gitcept
文件,但在被忽略的目录中不添加文件。我已经可以找到具有以下内容的空目录:

$ find . -type d -empty
但我怎么才能知道哪些被忽略了呢?可以直接忽略它们,或者忽略目录的子目录。。。有没有办法直接从
git
获取这些信息?比如:

$ find . -type d -empty | git classify --stdin

ignored     : xxx
non-ignored : yyy
太好了。

您可以使用此任务


假设您有一个具有以下结构的存储库:

foo/a.tmp
foo/b
bar/test/
baz/
这个
.gitignore

foo/*.tmp
bar/
如果您现在传递
find的输出-键入d-empty
git check ignore
,您将收到以下输出:

$ find . -type d -empty | git check-ignore --stdin
./bar/test
如您所见,
git check ignore
返回与您的
.gitignore
匹配的文件夹。要获得更详细的输出,可以使用
-n
--不匹配
)选项,该选项需要与
-v
--详细
)组合使用

要从搜索中排除
.git
文件夹,您可以提供进一步的参数以
查找
()

从这里开始,您可以简单地
grep
删除与您的
.gitignore
不匹配的文件夹,并删除前导的

$ find . -type d -empty -not -path "./.git/*" | git check-ignore --stdin -nv | grep '::' | sed -E 's/::[[:space:]]*//'
./baz

你不能简单地将
.gitkeep
添加到所有目录中吗?如果你将一个文件添加到一个被忽略的文件夹中,它将被忽略。当然,但这看起来不太干净。我认为添加
.gitkeep
文件一点也不干净,因为它们从一开始就不是git的功能。最好在那些目录中添加类似于
自述文件的内容,这些目录有一个简短的文本来解释它们的用途。这是一个品味问题。我不喜欢READMEs,它的唯一目的是将目录结构强制放到git中。但文件名并不是重点:我想自动完成这项工作。可能吗?
$ find . -type d -empty -not -path "./.git/*" | git check-ignore --stdin -nv
.gitignore:1:bar/   ./bar/test
::  ./baz
$ find . -type d -empty -not -path "./.git/*" | git check-ignore --stdin -nv | grep '::' | sed -E 's/::[[:space:]]*//'
./baz