使用没有工作树的git read-tree

时间:2015-01-09 14:34:55

标签: git git-plumbing

我正在尝试使用带有虚拟仓库的git管道命令创建提交历史记录。我可以使用包含blob的单个未命名树对象创建提交,但我无法弄清楚如何使这个未命名的树对象包含其他树对象。

我尝试使用git read-tree --prefix=tree_name tree_sha 它告诉我:fatal: This operation must be run in a work tree

我尝试使用git mktree(就像this page上显示的那样) 像这样:cat ../info.txt | git mktree

info.txt是一个包含1行的文件:

040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    test_tree

它告诉我:

fatal: input format error: 040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    tree_name

有人能告诉我一种创建和命名树的方法吗?

2 个答案:

答案 0 :(得分:1)

在hash和test_tree之间需要四个空格而不是一个空格。如果仍然无效,请尝试选项卡。

040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    test_tree

答案 1 :(得分:0)

我假设您的仓库中已存在哈希aa8c07e1371022a183b011d5d41517ef54780a17的树?如果没有,git mktree将失败。另外,您在info.txt中有一个尾随换行符吗?我阅读文档表明这也是必需的。

我已成功使用git mktree,如下所示:

$ cat tree.txt
040000 tree 4d5fcadc293a348e88f777dc0920f11e7d71441c    foo

$ git mktree < tree.txt
0a7f38a609340d0b8eede2f6debf8bad4191738f

前两个空格是空格,第三个是制表符,并带有尾随换行符。如果有疑问,请运行git ls-tree并检查其输出,可能使用xxd