据我所知,git commit对象总是指向一个树对象。
我想知道的是,实际上,这个树对象是否始终保证是git存储库的顶级树对象,表示创建提交对象时代码的整个状态。
在实际的git存储库中,是否有任何机会可以将任何提交对象指向层次结构中较低的树对象?
答案 0 :(得分:1)
嗯,提交总是指向提交时的整个树/分支历史记录,但您不仅限于在您的存储库中只有一个历史记录...
您可以拥有ProjectA的分支和ProjectB的分支(具有完全不同的历史记录和文件集)并使用subtree merge strategy,您可以将ProjectB的更改合并到ProjectA的子目录中,保留ProjectB的历史记录附!现在,来自ProjectB的分支历史记录的提交仍将位于其分支的根目录中,但合并提交会将它们映射到ProjectA的子树。当ProjectB中有更多提交以获取ProjectA中的更新时,您甚至可以重新合并。
相当令人困惑的事情,如果你问我...这个Pro Git部分建议合并而不保留其他分支的历史,这看起来很安全。
答案 1 :(得分:0)
git中的“顶级”树对象和子树对象之间没有区别;见The Git Object Model。因此,理论上的答案是“是”。正如Justin指出的那样,实际上在同一个git存储库中混合和匹配目录布局确实有用 - 实际上,git.git
本身(git自己的源库)执行此操作:其todo branch有一个目录布局完全独立于master branch。