其他类型文件的版本控制? (非源代码文件)

时间:2010-10-13 22:10:31

标签: bash version-control applescript

编程中的版本控制几乎是必需的,有些程序允许对源代码以外的文件(如MS Word,InDesign等)进行更改跟踪或表单版本控制等事项。

是否有任何类型的系统或体系结构/协议可用于在任意网络/共享目录中为任何类型的非源代码文件建立版本控制? [在Max OSX网络上运行]

(不跟踪单个文件中的个别更改(因为这是不可能的),但至少记录类似“John Doe在2010年12月7日下午12:01检查此文件”,这样我们就可以跟踪谁正在修改文件,并且人们知道在重新检入之前不会对其进行操作。)

如果没有基于软件的交钥匙解决方案,是否有更好的选择?

也许可以编写某种由Bash脚本/ Apple脚本,Automator动作和/或Finder插件组成的版本控制系统来添加类似“右键单击>签入/签出文件”的内容与服务器上的自定义版本控制程序同步的命令?

或者有任何想法可以阻止人们更改其他人可能正在处理的文件?

(其中一个问题是人们将文件复制/粘贴到他们的硬盘上并对其进行处理,这会阻止操作系统抛出“正在使用的文件”错误。并告诉他们不要复制像这样的文件不是一个选择。)

背景:

我的公司使用各种数字文件(电子书,交互式白板活动文件,照片,视频等)。我们经常有多个人在处理每个项目,有时他们会复制文件,覆盖同时处理同一文件的其他人所做的更改(即将文件从网络共享复制到本地HD,进行更改,然后复制回网络),将旧版本保存在与工作文件相同的目录中,忘记谁拥有哪个文件(就像人们将文件从共享项目目录复制到他们的个人共享文件夹中,进行更改,并来回移动。)

4 个答案:

答案 0 :(得分:3)

没有SCM系统可以合理地满足您的需求。如果您正在使用各种各样的文件,那么您需要投资某种数字资产管理或内容管理系统。签出(从而锁定其他用户)的能力是一个典型的功能,可以跟踪,记录和管理修订(用户签出文件,下载编辑它,并在完成后签入)。 DAM系统和CMS专门设计用于您正在使用的文件类型,如问题中所述。

我的回答快速添加:有很多DAM和CMS系统,所以你最好的第一步就是创建一个RFP,将你当前的环境,需求,内部规则和目标分解成容易消化的块并将其发送给各种供应商并评估他们的响应。

答案 1 :(得分:3)

git故意是愚蠢的。它是如此愚蠢,因为愚蠢而得名。

Git是如此愚蠢,以至于它不知道或不关心它跟踪的文件使用的格式。如果两个人编辑同一个文件,它不知道如何在合并中修复它们。 (实际上,它对很多类型来说都很聪明,但实际上这是一个独立于版本跟踪功能的额外模块)

但它足够聪明,可以防止你在发生分歧时覆盖变更。它还会告诉你在发生这种情况时应该责怪谁。

git不管理中央存储库,没有这样的概念。在git中,每个进行更改的人都在其本地计算机上拥有完整的存储库,并且他们会相互传递更改。您可以通过将更改传递到一个方便的服务器上的正式“祝福”存储库来“伪造”中央存储库。

那么这个问题怎么回答你的问题呢?

  

是否有任何类型的系统或体系结构/协议可用于在任意网络/共享目录中为任何类型的非源代码文件建立版本控制? [在Max OSX网络上运行]

     

或者有任何想法如何阻止人们更改其他人可能正在处理的文件?

Git不知道或关心它跟踪的格式。它将所有文件视为相同。你真正关心的是防止一个人在另一个人的变化中遭受破坏。

Git完全回避了这个问题。 clobber没有官方副本。如果您使用的是集中式服务器,并且有一个用户试图推翻覆盖比用户看到的更新更改的更改,则推送失败。用户必须提取新版本,解决更改/冲突并重试。即使用户顽固地将旧的更改放在地板上并上传自己的更改而不考虑他的第一次拉动和最终推送之间发生的更改,也不会丢失数据,因为git会保留所有内容,以及一个更负责任的人可以挑选这些文件并修复它。

答案 2 :(得分:0)

由于您的服务器支持FUSE,因此可以使用CopyFS来获得一个低痛苦的低增益可能性,它会保留每个文件的每个版本的副本。主要的缺点是它没有原则(它只保留副本,它不会对并发编辑或存储更改日志做任何事情),并且它可能是资源匮乏(每次保存,你得到一个新版本)。它的主要优点是全自动,因此您无需任何用户培训。

Tortoise SVN及其各种其他版本控制系统的对应物在Windows世界中相当流行。它们提供shell集成,而不是应用程序集成。在Mac OS X上,谷歌找到了SCPlugin;我不知道它的效果如何。

答案 3 :(得分:0)

对于开源数字资产管理系统,请查看ResourceSpace。

http://www.colorhythm.com/prismpoint_FAQ.php