Git vs SVN非文本文件/大型项目

rya*_*zec 10 git version-control

过去几周我一直在学习Git,我真的很喜欢它与SVN相比的工作方式.我希望完全切换到它的主要原因是合并被认为更容易,几乎没有冲突,我可以在本地提交.这促进了许多分支的使用(例如每个票据/问题/任务/等分支),并且还促进了许多提交.我只需要在SVN中使用分支(因为合并经常产生冲突)而且我只在100%确定问题是修复时才提交(而不是增量提交,这会更好).

现在,关于git的一个问题,就像我一直在阅读的那样,关于非文本文件/大型项目.例如,我正在研究目前在SVN中控制的游戏项目.现在有一个游戏项目,会有很多非文本文件,如艺术,声音和其他二进制文件,有些文件可能会变得非常大.git处理非文本文件/大型二进制文件的效果如何?如果我想将这样的项目移植到git,我必须记住哪些注意事项?

pok*_*oke 6

与其他版本控制系统相比,Git存储数据的方式之一是Git将文件内容完全存储为单个对象.这意味着每个文件的每个版本都作为存储库中的完整文件存在(尽管它已经非常压缩).因此,虽然其他VCS存储两个版本之间的差异/增量,并且因此不同地处理二进制文件和文本文件(因为二进制文件不是那么差异),Git只是处理所有这些文件相同.

因此,在Git中使用二进制文件与使用任何其他文件类型没有什么不同.您只需要记住,版本化非常大的文件将大大增加您的存储库大小(因为该大文件的每个版本都按原样存储,即使实际的二进制更改很小).然而,Git的压缩可以创造奇迹并且通常不会让你注意到这一点.特别是如果你只是谈论一个项目的资产,你可能不会遇到任何困难.

  • 每个对象最初只是一个单独的文件.经过足够的提交,或者当repo是'gc`时,或者当你克隆它时,它们将被整理和打包,使得存储库的大小与subversion存储库竞争. (9认同)
  • 压缩已经压缩的数据通常不会产生好的结果。git 并没有什么神奇之处可以进一步压缩 jpg。制作增量是减少大小的唯一方法 - 一旦增量化,它就会存储为增量(显然),这使得它与任何其他 SCM 没有什么不同。 (2认同)

ALo*_*LoR 0

git 完美地处理二进制文件。您只需记住二进制文件的所有版本都保存在本地。如果二进制文件(假设是图像)频繁更改,您最终将用该图像的所有版本填满本地空间。