其他类型文件的版本控制? (非源代码文件)
编程中的版本控制几乎是必需的,有些程序允许对源代码以外的文件进行更改跟踪或表单版本控制(例如 MS Word、InDesign 等)。
是否有任何类型的系统或体系结构/协议可以在任意网络/共享目录中为任意类型的非源代码文件建立版本控制? [在 Max OSX 网络上运行]
(不跟踪单个文件中所做的单个更改(因为这是不可能的),但至少记录类似“John Doe 已在中午 12:01 签出此文件”的内容于 07-15-2010”,以便我们可以跟踪谁在修改文件,并且人们知道在重新签入之前不要对其进行处理。)
如果不存在基于软件的统包解决方案,有更好的选择吗?
也许可以对由 Bash 脚本/Apple 脚本、Automator 操作和/或 Finder 插件组成的某种版本控制系统进行编程,以添加诸如“右键单击 > 签入/签出文件”之类的同步命令服务器上的自定义版本控制程序?
或者有什么想法可以防止人们更改其他人可能正在处理的文件吗?
(问题之一是人们将文件复制/粘贴到他们的硬盘上并对其进行处理,这可以防止操作系统抛出“文件正在使用”错误,并告诉他们不要复制这样的文件。)
背景:
我的公司处理各种类型的数字文件(电子书、交互式白板)。活动文件、照片、视频等)。我们经常有多个人在每个项目上工作,有时他们会复制文件,覆盖同时处理同一文件的其他人所做的更改(即将文件从网络共享复制到本地硬盘,进行更改,然后复制回网络),将旧版本保留在与工作文件相同的目录中,不知道谁在哪里拥有什么文件(就像人们将文件从共享项目目录复制到他们的个人共享文件夹中一样,进行更改,并前后移动)。
Version control in programming is pretty much a necessity, and some programs allow for things like change-tracking or a form version control for files other than source code (like MS Word, InDesign, etc.).
Is there any kind of system or architecture/protocol that could be put in place to establish version control for non-source code files of any arbitrary type, in any arbitrary networked/shared directory? [Running on Max OSX network]
(Not tracking individual changes made in individual files (as that wouldn't be possible) but at least recording something like "John Doe has checked this file out at 12:01PM on 07-15-2010", so that we can track who is modifying the files, and people know not to work on it until it's checked back in.)
If no turn-key, software-based, solution exists, is there a better alternative?
Perhaps it would be possible to program some kind of version control system composed of Bash scripts/Apple scripts, Automator actions, and/or Finder plug-ins to add something like a "right click > check in/out file" command that syncs to a a custom version control program on a server?
Or any ideas how to prevent people from making changes to files that other people might be working on?
(one of the issues is people copying/pasting the file to their HDD and working on it, which prevents the OS from throwing the "File in use" error. And telling them not to copy files like that isn't an option.)
Background:
My company works with various kinds of digital files (ebooks, interactive whiteboard activity files, photographs, videos, etc.). We frequently have multiple people working on each project, and sometimes they copy files, overwrite changes made by others who were working on the same file at the same time (i.e. copied the file from a network share to their local HD, made the changes, then copied back to the network), keep old versions in the same directory as the working file, lose track of who has what file where (like people copying the file out of the shared project directory and into their personal shared folder, making changes, and moving it back and forth).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
git 故意愚蠢。它是如此愚蠢,因此被命名为愚蠢。
Git 是如此愚蠢,以至于它不知道也不关心它跟踪的文件正在使用什么格式。如果两个人编辑同一个文件,它不知道如何在合并中修复它们。 (实际上,它对于很多类型来说都很智能,但这实际上是一个独立于版本跟踪功能的额外模块)
但它足够智能,可以防止您在更改发生分歧时覆盖更改。当这种情况发生时,它还会告诉你谁应该受到责备。
git 不管理中央存储库,没有这样的概念。在 git 中,每个进行更改的人在其本地计算机上都拥有完整的存储库,并且他们可以相互传递更改。您可以通过将更改传递到某个方便的服务器上的官方“祝福”存储库来“伪造”中央存储库。
那么这些如何回答您的问题呢?
Git 不知道也不关心它正在跟踪什么格式。它对所有文件都一视同仁。你真正关心的似乎是防止一个人破坏另一个人的变化。
Git 完全回避了这个问题。没有正式的副本可供破坏。如果您使用的是集中式服务器,并且一个用户尝试推送一项更改,而该更改会覆盖比该用户所看到的更新的更改,则推送会失败。用户必须拉取新版本,解决更改/冲突,然后重试。即使用户固执地将旧的更改放在地板上并上传自己的更改,而不考虑第一次拉取和最终推送之间发生的更改,也不会丢失任何数据,因为 git 保留了一切,并且一个更负责任的人可以挑选这些文件并修复它。
git is deliberately stupid. its' so dumb it's named for being dumb.
Git is so dumb that it doesn't know or care what format the files it tracks are using. It doesn't know how to fix them in a merge if two people edit the same file. (actually, it is that smart for a lot of types, but that's actually an extra module that is independent of the version tracking feature)
but it is smart enough to prevent you from overwriting changes when they do diverge. And it will also tell you who is to blame when that happens.
git doesn't manage a central repository, there's no such concept. in git, each person making changes has the complete repository on their local machine, and they pass changes to and from one-another. You can 'fake' a central repository by passing a change to an officially 'blessed' repository, on some convenient server.
So how does any of this answer your question?
Git doesn't know or care what format it's tracking. It treats all files the same. What you really seem to be concerned about is preventing one person from clobbering all over the changes of another person.
Git sidesteps that issue entirely. There is no official copy to clobber. If you are using a centralized server, and one user tries to push over a change that would overwrite a more recent change than that user has seen, the push fails. The user has to pull the new version, resolve the changes/conflicts and try again. Even if a user stubbornly just drops the old change on the floor and uploads his own without regard to the changes that occurred between his first pull and final push, no data gets lost, because git keeps everything, and a more responsible individual can cherry pick those files and fix it.
没有任何 SCM 系统能够合理地满足您的需求。如果您正在处理如此多的各种文件,那么您需要投资某种数字资产管理或内容管理系统。签出功能(从而锁定其他用户)是一项典型功能,并且可以跟踪、记录和管理修订(用户签出文件、下载进行编辑,并在完成后签入)。 DAM 系统和 CMS 专门设计用于您问题中所述的正在使用的文件类型。
我的答案的一个快速补充:有很多 DAM 和 CMS 系统,因此您最好的第一步是创建一个 RFP,将您当前的环境、需求、内部规则和目标分解为易于理解的块并发送将其分发给各个供应商并评估他们的反应。
No SCM system is going to reasonably meet your needs. If you are working with that much of a variety of files, then you need to invest in some kind of a Digital Asset Management or Content Management System. The ability to check out (thereby locking out other users) is a typical feature, and revisions can be tracked, logged, and managed (users check out the file, download to edit it, and check in when they are done). DAM systems and CMSs are specifically designed to be used with the types of files you are working with as noted in your question.
One quick addition to my answer: There are a lot of DAM and CMS systems out there, so your best first step is to create an RFP of sorts breaking out your current environment, needs, internal rules, and goals into easily digestible chunks and send it out to a variety of vendors and assess their response.
由于您的服务器支持 FUSE,一种低痛苦低增益的可能性是使用 CopyFS,它保留每个文件的每个版本的副本。主要缺点是它没有原则(它只是保留副本,它不会对并发编辑或存储更改日志做任何事情),并且它可能会占用资源(每次保存时,您都会获得一个新版本)。主要优点是它是全自动的,因此您不需要任何用户培训。
Tortoise SVN 及其各种其他版本控制系统的对应版本在 Windows 世界中相当流行。它们提供外壳集成,但不提供应用程序集成。在 Mac OS X 上,Google 会找到 SCPlugin;我不知道它的效果如何。
Since your server supports FUSE, one low-pain low-gain possibility is to use CopyFS, which keeps a copy of every single version of each file. The main downsides are that it's unprincipled (it just keeps copies, it doesn't do anything against concurrent edits or store changelogs), and that it can be resource-hungry (each time you save, you get a new version). The major advantage is that it's fully automatic, so you don't need any user training.
Tortoise SVN and its counterparts for various other version control systems are fairly popular in the Windows world. They provide shell integration, not application integration though. On Mac OS X, google finds SCPlugin; I have no idea how well it works.
对于开源数字资产管理系统,请查看 ResourceSpace。
http://www.colorhythm.com/prismpoint_FAQ.php
For an open-source Digital Asset Management system have a look at ResourceSpace.
http://www.colorhythm.com/prismpoint_FAQ.php