如何处理Git仓库中的图像?

dug*_*gla 40 git github

我继承了一个中等规模的iOS项目 - 大约30,000行代码 - 拥有疯狂数量的图像资产.当然我们使用Git/Github来scm.目前,这些图像都包含在目录树中,因此被摄入到回购中,从中淹没了它,并且通常使开发成为一个令人头痛的问题.

我们在项目上有4个开发人员,有些是虚拟的.我发现将图像移动到Dropbox,从iOS项目中引用它们并保持形状.

有没有人对这个想法发表评论?你做什么处理Git scm设置中的图像/视频/音频文件?

Ern*_*ill 32

实际上,我对此非常紧张; 如果你想更新图像,然后改变主意怎么办?或者,如果您需要使用旧图像构建维护版本,该怎么办?

如果这真的是一个问题 - 我从来没有看到这实际上是一个问题,但我会接受你的意见 - 为什么不只是使用一个回购图像,另一个用于其他一切?然后你可以懒得同步图像.

  • 如果你可以通过"屏幕上的Git shite"更具体地说明你的意思,我想有人可以帮你解码它...... (4认同)
  • @Ernest,问题出现在应用程序提交到App Store之前发生的活动漩涡中.你最终屏幕上会看到Git shite飞过屏幕,其中大部分是无害的,但隐藏在渣土中可能是重要的事情.它是我发现令人讨厌和混乱的无休止的混乱. (2认同)
  • @Ernest,总而言之,我必须同意你的看法,git repo中的资产属于"不是真正的问题".是的,我的回购膨胀,但最终,这是野兽的本质.干杯. (2认同)

Bri*_*ell 15

处理可能有点痛苦,但我过去使用的是图像和媒体的子模块.这样,您可以在不获取图像的情况下仅下载代码,但仍可以使图像和媒体与代码保持同步.当子模块历史变得太大时,我们可以创建一个没有历史记录的新repo,并将旧的子模块替换为新的子模块.这样,人们可以与最新版本的媒体同步,而无需完整的历史记录.

我们经常会在子模块中开始使用视频的绿色屏幕,因此我们可以在视频处于最终形式之前进行开发,但是一旦它被合成,我们就会打破子模块历史并推出一个新的子模块只是合成的视频.这避免了为每个视频提供一个完整的额外副本,同时仍然允许你(通过交换子模块的一些手动工作)来获取旧版本,如果你需要的话.

子模块将增加您需要执行的工作量.如果要提交对图像的更改,则需要在子模块中更改它们,提交它,推送它,然后转到父项目,将更改提交到子模块,然后推送它.对于简单的情况,您可以编写一些脚本以使其更容易一些,但在更复杂的情况下,例如合并冲突,它将比使用单个项目更复杂.


Mat*_*rog 10

我自己没有使用它,但是有一个名为git media的项目,旨在使用更好的二进制文件(如git中的图像)更容易.这是来自Scott Chacon,他在git世界中是一件大事,所以我想它可能运作得很好.


Str*_*ior 9

git-lfs似乎是解决这个问题的一个很好的现代解决方案.它将文件作为回购中的本地文本指针进行跟踪,同时将它们存储在外部大型文件存储中.这有点像subrepo解决方案,但不需要那么多的人工干预.

一方面,这使您更加依赖于访问Internet - 如果您无法访问外部文件存储,则可能无法在分支之间切换.另一方面,这意味着您在克隆repo时不会下载每个二进制文件的整个历史记录.

它受GitHub,Visual Studio OnlineBitbucket Server的支持.