Git:列出repo根目录下的所有目录

时间:2013-12-09 18:43:28

标签: git version-control

我需要一种方法来列出我的存储库根目录中存在的所有目录。我需要从每个分支和标签中获取它们。

例如:
我当前的repo在master分支的根目录下有20个目录。在我们的dev分支上,曾经有一个名为“lib”的目录。此目录已被删除。我需要一个命令列出这个“lib”文件夹,以及在其分支的当前提交中可能存在或可能不存在的所有其他目录。我需要他们。

我尝试过“rev-list”,但它似乎只给出了当前分支的结果。

1 个答案:

答案 0 :(得分:2)

您可以使用git cat-file -p打印树对象的内容,commit^{tree}表示法提取提交的树对象,即您可以说git cat-file -p HEAD^{tree}列出根目录当前提交的内容。使用git rev-list --all获取所有提交的SHA-1,并过滤除树对象之外的任何内容。

while read commit ; do
  git cat-file -p $commit^{tree}
done < <(git rev-list --all) | awk '$2 == "tree" { print $4 }' | sort -u

如果您的存储库很大,您可能需要一些时间。我用git.git(37k提交)尝试了它,用温缓存花了大约四分钟。如果您的目录名称包含空格,则必须调整过滤器。