在 git internals git-scm
书的一章有一个如何创建 git 树的示例:
Git 通常通过获取暂存区域或索引的状态并从中写入一系列树对象来创建树。因此,要创建树对象,您首先必须通过暂存一些文件来设置索引。
然后他们列出了我可以用来创建树的命令。我的问题是我是否可以在不使用索引(暂存区)的情况下创建树?例如,不要这样做:
git update-index --add --cacheinfo 100644 83baae618... test.txt
使用这样的东西:
git create tree --add --cacheinfo 100644 83baae618... test.txt
更新基于 Ismail Badawi 的回答:
$ echo 'making tree' | git hash-object -w --stdin
07dae42a0730df1cd19b0ac693c6894a02ed6ad0
然后
$ echo -e '100644 blob 07dae42a0730df1cd19b0ac693c6894a02ed6ad0 \maketree.txt' | git mktree
fatal: input format error: 100644 blob 07dae42a0730df1cd19b0ac693c6894a02ed6ad0 \maketree.txt
最佳答案
您可以使用git mktree
,如下所示:
echo -e "100644 blob 83baae618...\ttest.txt" | git mktree
(由于文字选项卡,您需要编写 echo -e
。这是 shell 的东西,而不是 git 的东西)。
请注意,这会创建一个仅指向 83baae618
的树,因此它与您的 update-index
调用并不完全相同,后者会添加到索引(通常已经指向其他事物)。您可以将多行传递给 git mktree,每行描述一个 blob 或树。
关于git - 不使用暂存区创建树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279136/