如何从git-fast-import'中读取目录(又名" cat-tree"?)

时间:2015-12-23 17:47:27

标签: git

我正在使用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
% 

其中numbersmaster分支的顶层目录,ls ...cat-blob ...是我输入的快速导入命令,其余是Git& #39;回复他们。

我经常可以使用git cat-file -p refs/heads/master:numbers来获取我需要的信息,但有时这些信息不会与快速导入中创建的更改一致,此外,它往往会显着变慢,因为它不能在快速导入过程中重用活动树。

1 个答案:

答案 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获取此输出,但与此同时,它总比没有好。