我需要一种方法来列出存储库根目录中曾经存在的所有目录。我需要每个分支和标签中的它们。
例如:
我当前的存储库在 master 分支的根部有 20 个目录。在我们的 dev 分支上,曾经有一个名为“lib”的目录。此目录已被删除。我需要一个命令来列出此“lib”文件夹,以及其分支当前提交中可能存在或不存在的所有其他目录。我需要它们。
我尝试过“rev-list”,但它似乎只给出当前分支的结果。
最佳答案
您可以使用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 提交)尝试过,在热缓存下花了大约四分钟。如果您的目录名称带有空格,则必须调整过滤器。
关于Git:列出存储库根目录下的所有目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478165/