1

我正在编写一个程序,该程序需要同时从同一个存储库中提取不同的提交(就像在这个问题中一样,但同时)。

瓷器命令(例如git checkoutgit archive)对索引进行操作,因此任何时候需要提取提交时,都需要先移动 HEAD 和/或通过索引。

有没有一种简单的方法可以将 Git 树对象转储到文件系统上的目录中?

4

2 回答 2

0

以编程方式执行此操作的一种方法是使用git cat-file.

当以批处理模式 ( --batch) 启动时,您可以将提交 ID 提供给其标准输入,它会立即将对象转储到标准输出(包括指示对象类型和长度的标头)。git cat-file因此,您可以通过生成一个进程、将对象(blob 和子树)SHA 写入其标准输入、将 blob 写入磁盘以及递归树对象来递归地遍历提交的树对象。

请注意,树对象将以二进制格式转储;您可以在此答案中找到格式说明。

于 2015-05-13T18:16:50.243 回答
0

您可以使用git archive导出tar特定提交的存档,并立即将其解压缩到某个目标目录:

git archive <commit> | tar -xf - -C <output-directory>

这也适用于任何树对象,而不是<commit>.

于 2015-05-14T01:00:34.937 回答