是否可以将现有树添加到索引

时间:2016-04-06 16:31:03

标签: git

为什么我这样做?在单独的存储库中有一个文件夹,我想以最简单的方式同步。

根据Git Internals Git Objects章节我的印象是文件夹只是git中的子树。并假设可以创建指向已存在树的目录。

这是我尝试过的:

git update-index --add --cacheinfo 040000 b5fd8e9305 rc

b5fd8e9305是树的id。这种方法只创建了空目录。所以问题是:是否可以使用git update-cache命令将子树添加到tee?

我也尝试了Git subtree merging: low level plumbing文章中描述的方法。虽然仍然存在update-index无法按预期工作的原因,但仍然可以正常运行。

1 个答案:

答案 0 :(得分:1)

虽然树对象可以包含更多树,但索引是特殊的,并且通常没有(引用)树对象。

可以将树推入其中,但它们表现不佳(它们可以magically change into gitlink entries)。

当git从索引进行新的提交时,它会动态构造每个新的树对象。也就是说,索引包含此时已添加到存储库的blob的ID(SHA-1),以及应保留它们的路径名;和git commit - 或者更准确地说,git write-tree - 根据索引中的路径名(以及+x-x模式位)构造所需的树集。然后,提交代码可以自己进行提交,这将引用顶级树。

(实际上,底线是您需要使用每个blob ID而不是树来更新索引。)