Git:列出存储库根目录下的所有目录

标签 git version-control

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

例如:
我当前的存储库在 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/

相关文章:

Git 在 'recovery point' 中保存更改而不提交并在同一分支中继续?

version-control - 有没有人为使用 Mercurial 的 NAV 创建了一个自产的源代码控制加载项

version-control - 如何撤消 hg init?

ruby - 使用 dm-migrations 推送到 Heroku 时出现问题

python - 如何使用 python(dulwich) 获取指定文件的最后一次提交?

eclipse - 无法通过SSH将裸Git项目导入Eclipse

两个不同文件之间的 git diff

svn - svn copy有什么用?

version-control - 自动化 IEC 62304 和 FDA 标准要求的工具

python - PyCharm:对 .idea 文件夹进行版本控制,同时在开发人员之间保留不同的解释器