2014-02-27 74 views
2

过去几年来我一直在使用Git和GitHub,这一切都很好,事实上,我打算将它用于其他事情,主要是基于媒体的项目。对于“其他东西”使用Git

在以前的生活中,我是一名音响工程师,在运行录音时可以看到使用分支策略的巨大优势。工程师可以创建一个新的功能分支“功能/ Recording_BVs”,并在记录后直接添加和提交Protools会话(音频录制软件平台)。这也将有助于解决音乐行业如何备份,共享和协作项目的老问题。

我想知道是否有其他人以这种方式使用Git(即不是纯粹作为基于代码的回购)。例如photoshop会话,视频会话等。或者另一方面,如果任何人都可以这样说服我,那么有什么缺点吗?

+0

这不是你建议的其他东西的类型,但我知道有些人正在使用Git来管理他们的配置文件。 – hvd

+1

[Binaries版本控制]的可能重复(http://stackoverflow.com/questions/104453/version-control-for-binaries)。 – raina77ow

+0

我不喜欢将二进制文件放入git存储库中,即使它工作正常。我喜欢做的是将二进制文件存储在其他地方的任意名称,可能只是一个序列号。然后在git仓库中存储一个* index *文件,只是一个文本文件,说明每个二进制文件哪个磁盘文件包含该文件的相关版本。这可能不是更好,但我觉得更不会在二进制文件存储在git ... – jcoder

回答

2

我建议不要这样做,原因之一。版本控制媒体文件与版本控制文本文件不同。

当你更新文本文件上的一行时,git commit会记录一行从Hello world更改为Goodbye

当你更新二进制文件的单个字节时,git commit会保留整个文件的记录。在两个二进制文件上执行diff毫无意义 - 如果您想合并分支,rebase分支,不管怎样,git都不知道如何合并两个二进制文件!没有安全的方法来做到这一点。

这意味着,随着时间的推移,你的git回购将会增长并成为巨大的。 这就是为什么它也建议设置git忽略程序集(例如,.dll,.jar等)

+1

不,git会一直记录一个新的blob对象,其中包含整个文件的新内容。稍后转移到其他仓库时,它可能会成为差异存储包。 – SzG

+0

@SzG“git将始终记录一个新的blob对象” - 这就是我所说的。 – dcastro

+1

Blob对象始终是整个文件的内容。 – SzG

0

我使用git作为Redmine的备份解决方案。 如果mysql转储更改或有新文件,它们将进入git仓库,这样我就可以恢复过去任何一天的状态。另外,这个脚本还能够从git仓库恢复Redmine。因此,将Redmine从一台机器迁移到新机器非常容易。

而且我的个人配置文件当然是:.bashrc.vim*

0

还可以使用Git为你想跟踪变化的任何文件。这包括源代码,但也包括任何文本文件(程序,会话,游戏的配置文件)。

我知道有人使用minecraft视频并使用git来保存他的Minecraft聚会(git add . && git commit -m "some interesting point")而不是“cp dir -r dir.old”。

1

git 可以这样做。但内部git将文件内容存储为它们之间的增量(差异)。多媒体文件是压缩的,因此“内容”(未压缩)中的几个字节发生了变化,压缩文件发生了巨大变化,而git无法很好地处理这些内容。另外,对于文本,很容易看到如何向用户显示有意义的改变(熟悉的diff(1)格式,告诉你添加/删除的行),对于一个声音文件,比方说不清楚如何做到这一点。因此,对各种文本(合并,修补,撤消修补程序,差异)都很自然的操作很难做到。幸运的是,源代码更改(给定体面缩进的源代码,逻辑上组织的行,以及编程类中敲入的所有内容)完全映射到行更改。如果只采用重排文本,添加单词的更改会改变整个段落,并可能会溢出到文档的其余部分。

作为一个恰当的例子,在这里一家公司需要存储软件设计(使用XML或类似软件编写),并尝试对其应用版本控制。这种失败原因大致相同:语义更改(“将此模块移到那里”)没有完全映射到面向行的更改。即使是大规模的线条变化(比如说移动一个<tag> ... </tag>结构)也可能具有没有的语义含义。他们最终创建了自己的差异工具来捕捉有意义的变化。