为什么我这样做?在单独的存储库中有一个文件夹,我想以最简单的方式同步。
根据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
无法按预期工作的原因,但仍然可以正常运行。
答案 0 :(得分:1)
虽然树对象可以包含更多树,但索引是特殊的,并且通常没有(引用)树对象。
可以将树推入其中,但它们表现不佳(它们可以magically change into gitlink entries)。
当git从索引进行新的提交时,它会动态构造每个新的树对象。也就是说,索引包含此时已添加到存储库的blob的ID(SHA-1),以及应保留它们的路径名;和git commit
- 或者更准确地说,git write-tree
- 根据索引中的路径名(以及+x
或-x
模式位)构造所需的树集。然后,提交代码可以自己进行提交,这将引用顶级树。
(实际上,底线是您需要使用每个blob ID而不是树来更新索引。)