2013-08-28 147 views
3

为什么我不能将merge变成裸回购?裸回购没有HEAD或工作树。在配置文件中我们可以看到bare=true为什么你不能合并在一个裸git回购?

您也不能在pull裸露的回购(因为拉取= &合并和合并不起作用)。但是,您可以推到裸回购 - 为什么?据我所知,push也包含合并,但在这种情况下,我们可以做得很好。

因此,问题可能是“git merge如何工作?”。为什么它需要HEAD?合并时它在做什么?

+1

推并不在目标回购中进行合并。它只做一个快进合并,这不是真正的合并,而只是将分支头移动到别的地方。 – Chronial

回答

1

As Chronial points out,推动快进合并或强制更新,它只是将引用/分支指针移动到不同的提交。

在实际的非快进合并中,如果遇到需要解决的冲突,则需要工作副本。其他Stack Overflow用户已经提到过它;例如,见this answer(重点煤矿):

混帐执行对工作树中的所有合并-Y操作(真正的合并,樱桃挑选,底垫,补丁应用程序)。这是在知识渊博的JakubNarębski的回答中提及了前几次,例如:

有没有办法,合并(或重订),可在不接触的工作目录(指数)工作,因为不可能是必须使用工作目录(和/或索引)解决的合并冲突。

+0

我对不对?当git合并时 - 首先查找它的数据库。 Git比较哈希(如果它们不同 - 将2个文件的快照解压缩并在里面比较)。为什么git需要工作目录从它自己的数据库合并两个提交的分支? –

+0

第二个评论和问题。当我们合并时 - git首先做什么?它试图比较哈希值,但哈希值是什么?当前分支的哈希和早午合并。当我们拉到光秃秃的回购协议时,git会做什么? Git尝试寻找当前早午餐的散列(甚至在裸回购中,我们有主早午餐),git查找主的头以找到最后使用的(HEAD)提交的哈希,但裸回购没有HEAD(即使工作树)。所以它会得到错误。这是真的?请纠正我。 –