如何获取在我的git存储库中删除的目录列表?

如何获取在我的git存储库中删除的目录列表?,git,Git,我必须在一段时间内在git存储库中生成一个更改列表。 为此,我注意到了提交ID,并将其与最近的头进行比较,以生成git存储库中的更改列表。例如: $ git diff --name-status OLD_COMMIT..HEAD 这将提供git存储库中的修改列表 但是,最近我注意到这种方法有一个缺陷,因为它没有列出已删除的目录。尽管它正确地列出了已删除的文件 如何在git存储库中获得正确的删除列表?(正如,如果它可以列出已删除的目录,那么可以理解其中的所有文件都已删除。因此,不会有一个庞大的已

我必须在一段时间内在git存储库中生成一个更改列表。 为此,我注意到了提交ID,并将其与最近的头进行比较,以生成git存储库中的更改列表。例如:

$ git diff --name-status OLD_COMMIT..HEAD
这将提供git存储库中的修改列表

但是,最近我注意到这种方法有一个缺陷,因为它没有列出已删除的目录。尽管它正确地列出了已删除的文件


如何在git存储库中获得正确的删除列表?(正如,如果它可以列出已删除的目录,那么可以理解其中的所有文件都已删除。因此,不会有一个庞大的已删除文件列表,只有一行显示已删除的目录!!!)

git
跟踪作为其目录表示形式的树对象。虽然从对象模型的角度来看技术上是可行的,但git并没有保留空的树。相反,
git
将从其父树中删除空树的任何条目

命令
git diff tree
生成一个输出,显示所有树条目在到树之间的变化情况

git diff-tree origin/master master
这将输出给定树中的所有条目(即本例中给定提交的根树)是如何更改的

格式在git diff tree中描述,但基本上,任何已创建或删除的目录的第二列或第一列中都会有040000,第一列或第二列中都会有000000。这是左侧和右侧条目的树条目“模式”

如果要递归并在子树中查找树条目,必须使用
-t
选项,而不仅仅是
-r
选项,因为默认情况下
-r
显示树的子条目,而不是树条目本身,
-t
将同时显示这两个条目

如果您感兴趣的目录已更改(添加或删除,或更改为或来自其他类型-例如symlink),而不仅仅是不同的内容,那么您可能需要过滤掉以
:040000 040000
开头的条目

这里有一个可能的命令行可以做到这一点

git diff-tree -t origin/master master | grep 040000 | grep -v -E '^:040000 040000'

我也很想知道如何做到这一点:)git不跟踪目录,只跟踪文件,因此这可能需要一些黑客攻击。要显示所有删除,包括文件和目录:git diff tree--diff filter=d--name only-t origin/master