使用 git 没有工作树的读取树

using git read-tree without a work tree

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

谁能告诉我创建和命名树的方法?

散列和 test_tree 之间需要四个空格而不是一个空格。如果仍然无效,请尝试使用标签。

040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    test_tree

我假设您的存储库中已经存在具有哈希值 aa8c07e1371022a183b011d5d41517ef54780a17 的树?否则,git mktree 将失败。另外,info.txt 中是否有尾随换行符?我对文档的阅读表明这也是必需的。

我已经成功地使用了 git mktree 这样的:

$ cat tree.txt
040000 tree 4d5fcadc293a348e88f777dc0920f11e7d71441c    foo

$ git mktree < tree.txt
0a7f38a609340d0b8eede2f6debf8bad4191738f

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