如何将树对象写入目录(存储库外部)?

时间:2018-07-03 11:50:56

标签: git

我想将git树写入目录,即鉴于git ls-tree的输出:

% git ls-tree -lrt 312735a86fe300861ebf0e6b081616029c2f6b76 

040000 tree ba37a4590a12acdd773e444b06e75ad151150ed2       -    subdir1
100644 blob deba01fc8d98200761c46eb139f11ac244cf6eb5      10    subdir1/test.txt
100644 blob dce813842fd90177bd0fbfd3011797934ee31303      15    test2.txt

我想做:

% git some-command 312735a86fe300861ebf0e6b081616029c2f6b76 /tmp/output-dir

并加入output-dir

tree output-dir
.
├── subdir1
│   └── test.txt
└── test2.txt

我想我可以解析git ls-tree的输出,然后基于第二列调用git ls-treegit cat-file进行解析。我的问题是更多地了解是否有内置工具(或外部工具)可以这样做?

1 个答案:

答案 0 :(得分:1)

您可以使用git archive将所需的树导出为.tar存档(默认将其发送到stdout),并通过tar -x将其输出通过管道解压缩文件放入所需的目录:

git archive HEAD -- subdir1 | tar -x -C /tmp/output-dir

subdir1替换为要导出目录的存储库内的路径。