首页 > 解决方案 > 并行检出同一存储库的不同分支

问题描述

我试图弄清楚是否有可能在服务器上从同一个存储库克隆多个分支。这些分支通过 ssh 克隆到不同的文件夹中。

比方说:

feature/feature1 -> C:\feature1 (user1)
feature/feature2 -> C:\feature2 (user2)
feature/feature3 -> C:\feature3 (user3)
feature/feature4 -> C:\feature4 (user4)

目标是同时访问不同用户的每个文件夹(需要同时进行更多不同的结帐)。拉取、推送、提交是并行过程......

这个解决方案有意义吗?我们需要在服务器上工作,因为我们的系统可以在那里访问。无法访问我们的本地 PC。

标签: git

解决方案


评论中描述git worktree方法将适用于 Unix/Linux 系统,但如果您的不同用户有不同的帐户(他们应该这样做,如果没有别的,他们应该这样做),但可能不适用于 Windows 。它有一些缺点:特别是,虽然每个工作树都有自己的索引,但所有工作树共享一个底层存储库,这意味着必须写入存储库的 Git 命令必须等待其他人的存储库数据库繁忙。这在实践中的破坏性取决于您的用户将如何使用它。

为每个用户提供自己的完整克隆通常是一个更好的主意,即使在共享服务器上,即使它是 Unix/Linux 系统。然后,他们可以推送到该共享服务器上的另一个克隆并从中获取,您将其指定为“事实来源”。这种共享方法只有一个缺点,那就是每个克隆都占用自己的额外磁盘空间。但是,这往往是次要的:在本地克隆本地存储库时,使用面向文件的“URL”:

git clone /path/to/source-of-truth.git work/my-clone

Git 将尽可能使用文件的“硬链接”来节省空间。这些硬链接工作得很好,尽管链接随着时间的推移“分解”(随着文件的更新)并且逐渐克隆最终占用越来越多的空间。这意味着每隔一段时间(例如,每月一次或每年一次左右,具体取决于活动),让共享服务器上的用户删除他们的克隆并重新-在他们方便的时候克隆。这将重新建立完整的共享。

(当然,现在磁盘空间很便宜,在现代 Linux 服务器上处理这个问题的正确方法可能是设置一个 ZFS 池,例如,在 RAIDZ1 或 RAIDZ2 配置中使用一堆8 或 12TB 驱动器来获得许多 TB 的可用存储,每 TB 大约 30 美元,甚至计算开销和布线成本等等。你可能会为一些高端英特尔 CPU 支付比所有驱动器加起来更多的钱。)


推荐阅读