网站等 审查 和 GitLab 提供的方式合并分支机构直接在他们的网络接口。 鉴于这些网站的存储只裸repos他们如何执行这些合并的? 可以同样的事情可以做的命令行在一个裸露的克隆? 我找到了 这个 作为一个可能的答案使用管道的命令。
3
因为 审查 是封闭源,我们不能肯定地说,究竟如何,他们的后台处理合并操作。 然而, GitLab 是 开放源码我们可以看看执行细节,这已经随着时间而改变。
如何GitLab它
今天,大多数混帐相关的特点是出现在UI,包括git合并在GitLab处理由 gitaly 组成部分GitLab,其相互作用的物理存储录的储存库。 它的主要使用其从属的图书馆, git2go,用于执行实际git行动。
寻找近的源代码 gitaly
,最好评估我可以做的是,gitaly实际上 并 广泛使用的工作树木需导行动,包括为合并。 储存库和工作树一般都是打开的克隆的"隔离"的目录,它都只是临时目录制on-the-fly和 存储库的工作是克隆的成的临时目录. (见 "隔离"。去#L40-58,从 合并。去#L.53).
他们如何执行这些合并的?
所以回答你的问题是:至少有GitLab,工作树 是 用于合并(除其他操作)而 不是进行中的裸露的储存库。 你只是没有看到他们,因为临时目录之前使用他们致力于实际的储存库的道路。
我们也许可以假定,审查并类似的东西,但它不可能知道。
可以这样做?
可以同样的事情可以做的命令行在一个裸露的克隆?
你指出一个例子, 似乎 工作没有检查出一个工作树? 但它的工作通过编写出来的树(使用 git write-tree
),这实际上似乎没有任何优势,说克隆的自裸露的仓库,并检查了工作树和使用 git
操作正常。 对性能(预测可能的反对),可以使用tempfs或其他一些存储器的映射位置。
我还不确定,连接的答案将会充分进行合并各种战略使用的 git merge
.
因此,在一个 技术性问题,也许? 回答你联系看来回答这个问题。 在实际操作层面,将是有益的,不,它不似乎如此。
@吉姆嗯。 我不是100%肯定的。 根据我的阅读,它看起来像
sytech
relativePath
在这种情况下是临时目录,这是创造了 相对 的回购磁盘上。 它看起来像是克隆的回购,然后压倒一切的对象路径(quarantinedRepo.GitObjectDirectory = relativePath
)在 quarantineRepo
目要点的tempdir(相对于什么,我假定是默认的实际回购协议的对象的位置返回的克隆方法)。
git clone --shared
.