【发布时间】:2009-12-15 22:46:52
【问题描述】:
我目前开始将 git 用于我的版本控制系统,但是我做了一些网络/游戏开发,当然需要存储图像(二进制数据)。因此,如果我的理解是正确的,如果我提交了一个图像并且它更改了 100 次,那么如果我获取该 repo 的新副本,我基本上会检查该二进制文件的所有 100 个修订版?
这不是大型存储库的问题,其中图像定期更改,存储库的初始获取最终不会变得相当大吗?有人在现实世界中遇到过任何问题吗?例如,我已经看到了一些替代方案,使用子模块并将图像保存在单独的存储库中,但这只会使代码库更小,图像存储库仍然会很大。基本上我只是想知道是否有一个很好的解决方案。
【问题讨论】:
-
这是 git 的设计限制。编写它是为了做好一件事:管理 Linux 源代码树,这几乎都是纯文本。 Git 是关于差异和合并的,这些东西并不真正适用于图像。如果您的媒体文件非常大或经常编辑,您最好使用不同的机制来存储这些文件的历史记录,并且如果您没有真正在代码上协作或制作大量分支,那么您可能会更好完全不使用 git。
-
git 将处理二进制文件,它用于存储 deltas 的系统基于二进制内容(您在补丁中看到的文本差异是动态计算的,而不是存储内容的表示)。话虽如此,压缩图像的 xdelta 不太可能减少空间需求。您可以将所有图像保存为 XPM 或 BMP:p
-
如果您想要一个图像的 100 个版本,那么无论您使用哪种 VCS,您都必须在某处存储 100 个图像。如果您有一个 git 服务器,您可以将图像转储到服务器上,然后浅层克隆到较小的深度。如果您需要返回
version0,那么当然,您需要下载整个存储库。
标签: git