在大型游戏项目中使用 Git 的潜在策略是什么?


关于

我的问题的一些背景知识,然后是一些问题:

我的团队将SVN用于许多游戏开发项目,在过去的几年里,SVN一直为我们提供了很好的服务。但是,我们最近一直在探索是否应该迁移到 Git,原因如下:

  • 我们相信 Git 的分支功能将开辟有益的编码工作流程和实践,这些工作流程和实践在 SVN 中要么困难,要么不可能(功能分支、合并前的代码审查、拉取请求(。
  • 我们团队的一些新成员来自一家使用 Git 的游戏公司,他们哀叹 SVN 中缺少功能 X 或 Y。
  • 与SVN相关的工具似乎比以前更新/维护的要少。简而言之,Git和类似的东西很受欢迎,而SVN则变得不那么受欢迎。

我们想使用 Bitbucket,因为与公司防火墙后面的 SVN 存储库相比,我们可以更轻松地与外部承包商协作。

我们使用 git-svn 工具将我们的项目转换为 Git 存储库。Git 存储库最终是 6GB,其中包含所有历史记录!不幸的是,这对于Bitbucket和Github来说太大了,它们都执行1-2GB的限制。

这引起了一些"信仰危机",即我们是否通过从SVN切换到Git做出了正确的决定。你可以在网上找到很多观点,认为 Git 不适合游戏开发,或者二进制文件令人头疼。我们的计划是将源美术文件保存在SVN中,但游戏的任何"最终"美术资源都将存在于SVN中。此外,一组共享库将存在于链接到游戏存储库的单独 Git 存储库中(很可能使用子树或某些依赖项管理系统(。

我正在寻找几个方面的答案/反馈:

  1. 6GB 对于 Git 存储库来说太笨拙了吗?人们是否能够有效地使用它,或者它是否可能无响应或难以推送到遥控器?
  2. 将大型 Git 存储库拆分为几个较小的存储库以避开任何"大型存储库"问题是否合理?仔细想想,这似乎是一个大混乱,构建一个项目以适应版本控制限制对我来说并不合适。克隆似乎也有问题 - 您是否需要单独克隆每个存储库,还是可以一次性完成?
  3. 其他人是否成功地将 Git 用于这种类型的游戏开发项目,如果是,使用了哪些策略使工作流程尽可能简单?我们会花更多的时间争论版本控制来竞标而不是实际开发游戏吗!?

那些不得不走这条路的人的任何反馈或见解都会很棒!

我没有使用 Git 进行游戏开发,而是用于具有大型视频资产的多媒体开发。

我们所做的与您建议的类似;我们将大型资产保存在一个单独的子模块中。需要一点培训(可能还有一些使常见情况更容易的包装脚本,我不记得确切了(让每个人都习惯于使用子模块,但是一旦它们完成,它就会相当顺利地工作。

我们甚至允许在子模块

中更改资产,一旦它变得太大,我们只需创建一个新的存储库并将子模块切换到该存储库。这意味着您没有在两个部分之间获取历史记录,但由于它们是二进制文件,因此无关紧要,如果您想支付签出大型二进制存储库的费用,您可以随时使用 git replace 将两个存储库的历史记录拼接在一起以获取完整的历史记录。

所以是的,我想说 Git 可以解决这个用例,只要你保持你的主仓库大小合理,只有文本,并单独管理你的资产。无论是在SVN中以某种方式导出,还是在你打破历史的Git子模块中,还是通过git-annex之类的东西,你可能必须弄清楚,这取决于尝试几种方法,看看你认为哪一种效果最好。

最新更新