使用源代码控制管理图形文件(例如PSD和AI文件)是否有意义?

15
当然,像Git(Mercurial、SVN等)这样的源代码管理工具可以很好地管理源代码。但是我想知道,当用于存储像Photoshop PSD和Illustrator AI文件之类的文件副本时,这些工具是否为开发人员提供任何优势?使用这些工具处理这些文件是否有意义?我是否在存储库中存储的比所有这些文件的文件大小总和还要少?尽管这些文件的文件格式只能由机器读取,但我希望对于这种应用程序,特别是处理矢量图形而不是光栅图形时,这些文件的一小部分将更改,而其余大部分将保持不变。谢谢您的见解。

1
我必须不同意在答案中表达的一些观点,就是否应该由SCM系统管理图像而言。 任何项目所需的文件都应在源代码控制中。 否则,您如何为客户支持或回滚创建版本? @Alex提供了一个解决方案:使用指向图像存储库的额外数据层。 这需要自动化,以确保SCM和图像存储库之间的完整性和相关性保持完好。 - Brad Lanam
注意:考虑到 PSD 现在(2014年6月)可以通过图形化方式进行差异化处理,因此在 Git 仓库中管理它是有意义的:请参见下面的 我的回答 - VonC
6个回答

11

Git本身可以管理任何类型的数据,只要它们不是太大或太多。
请参见“Git处理大文件”(“大”指大小或数量)。

Git不能原生支持差异化图片/图形,但是Git仓库托管服务可以扩展其Web GUI以提供此类支持。

Github在2014年6月刚刚宣布了“ePSD查看和差异化",它扩展了他们的图像查看和差异化"(2011年11月)

如果您的存储库中有任何PSD资产,则会像图像一样对待它们,这意味着您可以内联查看它们并使用我们的三种图像查看模式来查看提交中发生了什么变化。

2022年3月更新:这已经不再受支持
请参见“处理非代码文件”,以了解支持差异化的文件。

https://cloud.githubusercontent.com/assets/2546/3165594/55f2798a-eb56-11e3-92e7-b79ad791a697.gif


9
虽然这是一个非常主观的问题,但我认为对于git来说至少不需要。
  • Git并不是为了作为存储解决方案而创建的。
  • 没有办法合并图像文件。
  • 因此,分支没有意义——如果将这些分支合并在一起的唯一方法是选择哪个版本是正确的,那么最好立即替换该文件。
  • Git GUI工具不如控制台简单易懂。你想教你的艺术团队提交和推送之间的区别吗?
  • 当你checkout git repo时,你会检出所有文件的完整历史记录,从最初的提交开始。如果你长时间地处理二进制文件,它们的大小会变得巨大。
  • 许多git托管网站(如github)对单个文件大小有限制。

我认为使用dropbox会更好。


是的,你说得对。Git并不适合处理图形文件。最好的方法是将各个版本的图形文件简单地存储在磁盘上,并上传至DropBox或其他安全存储位置,并制作备份副本。这些文件相当大,并且往往从一个编辑到另一个编辑完全不同。 - John Sonderson
2
当你检出git仓库时,你会检出所有文件的完整历史记录,从最初的提交开始。如果你长时间处理二进制文件,它们的大小会变得巨大。但这并不一定是真的。在进行git checkout时,添加--depth <depth>选项可以只克隆一个浅层版本。 - Quinton Pike
你说得对,分支/合并确实没有太多意义,而且文件大小也是个问题。
  • 图形用户界面工具比命令行工具更容易使用。
  • 除非这是与他人共享大文件的唯一方式,否则Dropbox不是一个好建议。
- axd
Git并非作为一种存储解决方案而被创建。OP并未要求存储,而是要求版本管理。目前似乎没有更好的选择(除了一些特定的专有软件),因此文本VCS是目前唯一的选择,如果不算完美,仍比云存储更好地管理团队内的向量或光栅版本。您会失去差异化(取决于前端),合并和其他功能,但您可以使用其余的功能,这已经非常好了,相对于与云存储服务协作的全面混乱(中大型组织的噩梦)。 - cedbeu

4

那些回答“不”的人有非常好的理由,但这并非不可能。

我成功地使用GitHub来管理一个开源项目,该项目由数百个Illustrator文件和PDF文件组成(还有一些代码和文本,但与此相比微不足道)。该仓库大小约为8GB。我之所以做出如此疯狂的事情,是因为Illustrator文件是产品的核心,而不仅仅是配套的装饰艺术品 - 它们是项目的 - 而且我想确保它能保持开源。

在使用中会遇到一些难点和需要注意的事项。我建议:

  • 除非你对git非常熟悉,否则不要尝试。解决冲突和分支问题可能会变得非常棘手,你可能需要做一些相当晦涩的事情来保持repo的稳定。没有人指望你了解git的每一个角落(我不确定一个明智的人能够),但是要知道足够多的内容,以便可以通过谷歌搜索其余部分。

  • 确保你熟练掌握命令行上的git操作。GUI工具可能会使复杂性变得简单,但也会阻止你完全理解底层发生的情况。一旦你有了这种理解,你就可以在95%的时间里使用GUI。

  • 如果可能的话,避免分支。二进制文件不能像代码那样合并,因此将分支合并在一起可能会变得混乱而费力。

  • 了解git的特定功能,可以帮助你管理repo的大小和复杂性:部分检出、标签、git gc等。

  • 提前规划时间。也许将项目分成两个或更多的git repo,或与另一个服务组合,会对你有益。

  • 如果你正在使用托管服务,请确保你知道它们对repo的限制。例如,GitHub会抱怨超过100MB的文件。这里是他们针对二进制文件的推荐指南


多年后更新:我将项目迁移到了Git LFS,该项目在GitHub上需要付费。对于大型二进制文件,LFS比普通的git更有效。 - Marcus Downing

1
不,我不建议使用git、svn等进行版本跟踪。在Adobe文件的几乎相同版本之间,会有大量行发生变化-通过进行差异比较可以自行查看。特别是当在Illustrator中启用原生文件压缩等选项时,情况尤为如此。
通过精心使用图层、链接和保存文件里程碑版本,您将比SVN更有效地利用存储空间,特别是对于本机Adobe文件而言。
我能想到的唯一例外是基于XML的文件,例如纯矢量SVG。

是的,也许使用其他图形程序(如使用SVG的Inkscape)创建的文件不会遇到同样的问题,因此可以在没有PSD或AI文件开销的情况下进行源代码控制。 - John Sonderson

0

对于那些指出文件大小是一个大问题的人,Git-LFS 来解决这个问题。

它易于安装和使用,并且流行的平台如 GitHub, GitLabBitbucket 都可以无障碍地支持它。


0
如果您只需要一个简单的版本管理工具和简单的用户界面,Subversion是一个非常好的选择。它有很好的图形用户界面支持(例如SmartSVN或TortoiseSVN),并且可以与shell集成。此外,它还可以更轻松地选择性地检出您所需的文件。

1
很好。但在我看来,Git是一种更现代的版本控制系统,并且总体上做得更好。 - John Sonderson

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