我正在使用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& #39;回复他们。
我经常可以使用git cat-file -p refs/heads/master:numbers
来获取我需要的信息,但有时这些信息不会与快速导入中创建的更改一致,此外,它往往会显着变慢,因为它不能在快速导入过程中重用活动树。
答案 0 :(得分:0)
与此同时,Jeff King给了我一个不理想的解决方案,但是让我在不运行Git的N个实例的情况下获取N个目录的内容。
他建议我使用git cat-file --batch
。与cat-blob
中的fast-import
相反,这对树有效,输出不是很漂亮,而是使用以下格式:
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
获取此输出,但与此同时,它总比没有好。