我的问题是:可靠的和简单的版本控制系统/机制/平台/...适用于内容如下的项目有效地整体的、不透明的东西?
我从事的大多数项目都包含以下文件类型的混合:
- 纯文本内容(C、Java、...、数据文件、bash 脚本、...)
- MS Office 文档(Word、Excel、Visio 等)
- 矢量图形文件(SVG、EPS 等)
- Simulink® 模型文件(.mdl,格式类似于 JSON)
- 我们定制的单元测试框架(生成的 XML 文件)
- ...其他具有类似限制的事物
目前我们总是把所有内容放在一个大型的 Subversion 存储库中。显然,这只适用于纯文本文件。其余所有内容在作为纯文本处理时都是无法合并的。
对于其中一些,我们确实在 subversion 之上使用了“托管”版本控制系统。例如,对于 MS Word 文档,我们使用“跟踪更改”功能。这实际上已成为我们针对 MS Word 文档的版本控制系统。然后,每当需要标记/交付文档的某个版本时,我们都会在 subversion 存储库中创建文档的副本。
类似地,有管理的方式来同时开发 Simulink 模型、同时创作矢量图形等等。
但你可以想象,我对这个工作流程很不满意。像“跟踪更改”这样的功能并不能阻止两个用户同时编辑同一个文档。两者的更改无法合并,合并需要手动完成(我甚至不会提到文档损坏)。Simulink 框架也是如此;真实的并发是不可能的。
这只是一个疼痛更不用说这是完全低效的,因为需要大量手动复制和处理文件才能保持所有东西都正确版本化——将所有内容放在 Subversion 存储库中只不过是通过电子邮件发送文档的一种便捷替代方法(这只对人们方便不是管理存储库...)。
像 Sharepoint 这样的工具可以解决 MS Word 文档的问题,但它不是一个通用的解决方案;我们仍然需要处理这些其他文件类型。像 subversion 插件/钩子/等这样的工具也可以工作,但很难做到正确,而且很难保持最新状态,此外,这可能是一项重大投资,因为我们可能需要为 Simulink 模型文件等开发自定义插件……
所以我的问题是:有没有可靠的和简单的版本控制系统/机制/平台/...适用于内容如下的项目有效地整体的、不透明的东西?