使用Git向工作室分发夜间构建版本

9

简短版

每天早上需要将夜间构建分发给70多个人,希望使用git来平衡传输,并想知道在设计系统之前是否有提示、陷阱或缺陷。

详细版

每天早上我们需要将夜间构建分发给70多个工作室的人员(艺术家、测试人员、程序员、生产等)。到目前为止,我们已经将构建复制到服务器上,并编写了一个同步程序来获取它(在底层使用Robocopy);即使设置了镜像,传输速度仍然不可接受,在高峰时期需要花费一小时甚至更长时间进行同步(低峰时期大约需要15分钟),这表明硬件I/O成为瓶颈。

我有一个非常棒的(虽然肯定不是原创的)想法,就是在整个工作室中分配负载。在调查使用臭名昭著的比特流协议编写客户端之后,我另一个想法是可以使用git,因为它的设计本身就可以让我们进行构建和修订管理,并带有无需服务器的附加好处。

问题

  1. 如何开始使用git?我有使用像PerforceSVN这样的集中式源代码控制系统的经验。阅读文档,似乎只需要运行git init path\\to\folder,然后在另一台机器上运行git clone url

  2. 如何获得上述git clone命令的url?我可以定义吗?我发现拥有一个URL的概念很奇怪,因为git没有中央服务器 - 或者它有吗?例如类似于比特流跟踪器?

  3. 识别构建的更好选项是使用更改列表号码还是标签?

  4. 是否可以限制存储的修订版本数量?这将非常有用,因为除了每晚的构建之外,我们还有几个CI构建需要分发,但是保留无限数量的修订版本并不合理。在Perforce中,您可以通过设置属性来限制修订版本。


我会进一步研究比特流协议,因为大多数客户端都支持从 .rss 源获取种子文件,这样你可以发布一个包含最新版本的源,让所有人自动下载。 - grapefrukt
我们想使用自定义客户端,因为生产环境绝对不允许在用户机器上安装比特流客户端,例如uTorrent。然而,我喜欢发布RSS源并自动同步的想法(这是我们上周在当前解决方案中必须进行的黑客攻击)。 - Dennis
在进一步阅读了有关Git的内容后(感谢答案中提供的链接),我认为我需要再深入研究一下BitTorrent。 - Dennis
我有一个关于使用BitTorrent实现这个的问题:https://dev59.com/yFvUa4cB1Zd3GeqPpxAM - Dennis
3个回答

4

我认为在你的情况下,Git并不会真正有帮助。是的,它是分布式的,但不适用于“尽可能向更多人分发某些东西”的情况。它不能帮助你减少带宽负载,而且如果你使用ssh来使用git,还会增加额外的负载。也许你应该退一步,给BitTorrent协议另一个机会。


谢谢Dmitry。我很高兴我问了这个问题,因为我确实认为分布式意味着获取会被平衡。 - Dennis
我有一个关于使用BitTorrent实现这个的问题:https://dev59.com/yFvUa4cB1Zd3GeqPpxAM - Dennis

1
  1. 如果所有客户端都可以共享访问您的服务器,则可以使用文件协议(“本地协议”)。
  2. 如果您可以从客户端创建目录或ls,则可以获得所需的URL。
  3. 标签:一旦克隆了存储库,就可以将其检出到某个标记。
  4. 不完全是这样,您需要每天获取新提交以获取完整历史记录。

注意:将二进制文件放入分布式存储库并不是一个能够长期扩展的解决方案,因为存储库会变得越来越大。(您可以在此处找到替代的git设置)。
优点是通过中央Git存储库计算增量(比Robocopy快得多),并将该增量作为答复发送给下游存储库执行的git fetch


谢谢你的回答。我会看看“替代的git设置”。然而,我不喜欢在任何源代码控制解决方案中存储二进制文件,但这是我们的要求之一,因为很多东西都被构建到可执行文件中,而它们本可以是单独的文件(对EpicUnreal 3摇了摇拳头)。 - Dennis

1
  1. 是的,这就是它的本质。在某个地方创建一个存储库,然后您可以从其他地方克隆它。

  2. 您在步骤1中初始化的存储库必须可以从您要克隆到的计算机访问。Git是无服务器的,但每个存储库都必须从某个地方获取它们的内容。因此,您的70多台计算机都必须知道他们应该从哪里获取新版本。如果您想分发负载,您将不得不确定一个策略,即谁从谁那里获取更新。

    URL可以是文件路径、网络路径、带有路径的SSH主机等。

  3. 标签会很好用。

  4. 您可以重新设置git存储库以删除旧的修订版本。请参见Completely remove (old) git commits from history

然而,我认为这并不能解决你的原始问题,即分配负载。应该探索其他途径。例如,多播复制,也许MQcast和MQcatch可以帮助你?


谢谢你的回答,我会研究你提到的多播选项。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接