git - 并行检出同一存储库的不同分支
问题描述
我试图弄清楚是否有可能在服务器上从同一个存储库克隆多个分支。这些分支通过 ssh 克隆到不同的文件夹中。
比方说:
feature/feature1 -> C:\feature1 (user1)
feature/feature2 -> C:\feature2 (user2)
feature/feature3 -> C:\feature3 (user3)
feature/feature4 -> C:\feature4 (user4)
目标是同时访问不同用户的每个文件夹(需要同时进行更多不同的结帐)。拉取、推送、提交是并行过程......
这个解决方案有意义吗?我们需要在服务器上工作,因为我们的系统可以在那里访问。无法访问我们的本地 PC。
解决方案
评论中描述的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 支付比所有驱动器加起来更多的钱。)
推荐阅读
- java - 测量旋转字符串Java的像素高度
- html - 如何使用 HTML/CSS/JS 覆盖 HTTP 标头中指定的 Content-Type/charset
- typescript - 在 TypeScript 中猴子补丁一个 npm 模块
- excel-formula - Formula to get the difference between a number and a static one
- python - 指定 Python pip requirements.txt 大于但小于时出错
- node.js - 如何为 node-excel-export 设置行高?
- google-apps-script - 将通过 gmail 发送给特定联系人的最后一封电子邮件的“时间戳”添加到谷歌表格
- php - 如何在php中的echo中实现foreach循环
- c - 为什么这个循环不能用于找到向量的欧几里得和?
- scala - 期货列表的 Monix 任务处理失败