我正在开发一个Git前端,它使用git-fast-import向当前未签出的分支提交新的提交。在某些情况下,我实际上需要查看分支的内容。幸运的是,有cat-blob命令可以让我对文件执行此操作,但对于目录,此命令将失败:
% git rev-parse refs/heads/master
5feba4d2856f545df951482c5ca9416c7202b555
% git fast-import
ls 5feba4d2856f545df951482c5ca9416c7202b555 numbers
040000 tree 2ca1672d50c9dbfe582dc53af3c7ce9891a7a664 numbers
cat-blob 2ca1672d50c9dbfe582dc53af3c7ce9891a7a664
fatal: Object 2ca1672d50c9dbfe582dc53af3c7ce9891a7a664 is a tree but a blob was expected.
fast-import: dumping crash report to .git/fast_import_crash_11859
% 其中numbers是master分支顶层的目录,ls ...和cat-blob ...是我输入的快速导入命令,其余的是Git对它们的回复。
我经常可以使用git cat-file -p refs/heads/master:numbers来获取所需的信息,但有时这些信息不会随着在快速导入中创建的更改而更新,此外,它往往会明显变慢,因为它不能在快速导入过程中重用活动树。
发布于 2016-01-17 00:38:49
同时,Jeff King给了我一个不太理想的解决方案,但它确实允许我在不运行N个Git实例的情况下获得N个目录的内容。
他建议我使用git cat-file --batch。与fast-import中的cat-blob相反,它在树上工作,尽管输出不是很好地打印,而是使用以下格式:
tree = tree_entry*
tree_entry = mode SP path NUL sha1
mode = ascii mode, in octal (e.g., "100644")
path = <any byte except NUL>*
sha1 = <any byte>{20}解析它对我来说很不方便,直接从fast-import获得输出会更好,但同时,这总比没有好。
https://stackoverflow.com/questions/34441100
复制相似问题