混帐合并在公共赤repos

0

的问题

网站等 审查GitLab 提供的方式合并分支机构直接在他们的网络接口。 鉴于这些网站的存储只裸repos他们如何执行这些合并的? 可以同样的事情可以做的命令行在一个裸露的克隆? 我找到了 这个 作为一个可能的答案使用管道的命令。

git github gitlab merge
2021-11-23 22:52:54
1

最好的答案

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.

因此,在一个 技术性问题,也许? 回答你联系看来回答这个问题。 在实际操作层面,将是有益的,不,它不似乎如此。

2021-11-24 00:59:11

谢谢你追踪的那些代码段。 他们看起来像证据,用于一个一次性的、非裸的克隆。 有趣的是, 这些线路 的样子,他们可能试图分享的对象裸回购协议的克隆,也许对表现。 这让我想起我的 git clone --shared.
Jim

@吉姆嗯。 我不是100%肯定的。 根据我的阅读,它看起来像 relativePath 在这种情况下是临时目录,这是创造了 相对 的回购磁盘上。 它看起来像是克隆的回购,然后压倒一切的对象路径(quarantinedRepo.GitObjectDirectory = relativePath)在 quarantineRepo 目要点的tempdir(相对于什么,我假定是默认的实际回购协议的对象的位置返回的克隆方法)。
sytech

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................