我正在编写一个程序,需要同时从同一个存储库中提取不同的提交(例如this question,但同时)。
诸如git checkout
和git archive
之类的瓷器命令对索引进行操作,因此每当需要提取提交时,它都需要首先移动HEAD和/或遍历索引。 / p>
有没有一种简单的方法可以将Git树对象转储到文件系统的目录中?
答案 0 :(得分:0)
以编程方式执行此操作的一种方法是使用git cat-file
。
以批处理模式(--batch
)启动时,您可以将提交ID提供给其标准输入,它会立即将对象转储到标准输出(包括标题以指示对象类型和长度)。因此,您可以通过生成git cat-file
进程,将对象(blob和子树)SHA写入其标准输入,将blob写入磁盘以及递归树对象来递归遍历提交的树对象。
请注意,树对象将以二进制格式转储;您可以在this answer中找到格式说明。
答案 1 :(得分:0)
您可以使用git archive
导出特定提交的tar
存档,并立即将其解压缩到某个目标目录:
git archive <commit> | tar -xf - -C <output-directory>
这也适用于任何树对象,而不是<commit>
。