使用GIT管理文档

6
我正在开发一个网站,可以创建项目并上传每个产品的数据。这些数据大多数是电子表格文档、图片、PDF等。理想情况下,我想使用VCS(git优先)类似的设置,每次更新特定文档时,我只需将该文档提交到仓库即可。如何实现这一点的任何想法都会有所帮助。
3个回答

8
您可以在每次上传后在子shell中调用git。
但我认为,特别是在Web应用程序中,使用任何版本控制系统都不是文档版本控制的好方法。这是因为对于类似办公文档的文件,您将主要使用二进制数据。当涉及到二进制数据时,版本控制系统很糟糕(没有例外)。您将无法进行任何差异比较,并且元数据管理不适合此类事物-提交的作者大多数情况下绑定到特定帐户上(您可能会使用一个git系统帐户),没有存储任何其他信息(除了基本文件信息:大小,权限,ctime),因此您将不得不自己存储它(作者身份,Web应用程序用户的权限,附加元数据)。还要注意,多个用户可以同时提交数据,因此您的版本控制中会有分支。当您拥有大量数据集时(并且使用二进制办公文件可能比您想象的更快),您将无法分区此类存储库。
在我看来,在这里使用版本控制系统给您带来的收益非常小,并引入了额外的问题。
我建议将元数据保存在数据库中(文件名,修订版,其他内容),并将文件修订版保存在磁盘上。将每个具有修订版的文件保存在单独的,唯一的目录中。这里有一个提示:不要使用来自上传的文件名。使用哈希函数基于内容和元数据计算唯一名称。

我同意上面的观点,但是如果楼主想要采用版本控制系统的方式,可以使用各种语言的Git包装器。点击此处查看相关信息。 - asymmetric
3
我同意“不使用版本控制系统”的建议。+1 - VonC
@cezio - 你知道有什么工具/软件可以帮助维护和管理文档(包括版本控制功能-差异、版本等)吗? - Andy Dufresne
@AndyDufresne 任何一个像样的文档管理系统都应该具备这些功能。例如OKM:http://www.openkm.com/en/overview/features.html,Alfresco:http://www.alfresco.com/products/document-management等等。 - cezio

2
作为 Cezio 回答的一个分支,如果您真的想使用版本控制系统进行版本控制,请考虑使用 LaTeX。由于它本质上是编译成文档(通常是通过 pdflatex 生成 PDF)的源代码,因此它是一个合理的版本控制候选项。

作为一种事后的想法,对于重新使用这个东西表示歉意。 - Sean Allred

1

并没有一个通用的“保存时提交”功能(至少没有一个与您提到的文档类型相关联的所有编辑器都集成在一起的功能)

最简单的方法是一个后台任务,每隔5分钟提交一次(例如在Git中,“git add -A && git commit -m "xxx"”)。

实际上,Mark Longair发表评论:

flashbake被设计为从cron运行以执行您在第二段中描述的带有某种合理提交消息的操作。
我不确定原始发布者是否需要此功能。

原始项目在这里:

自动备份很好,除非您有一些需要查看增量历史记录的文件。源代码控制对于这种情况非常有用,但大多数工具都希望作者在途中手动提交更改。 因此,一个无缝的源代码控制解决方案将自动备份的便利性与源代码版本控制的强大功能结合起来。

实际上,如果文件在上传时被添加,服务器端会在上传后自动添加并提交。 - cezio
我从未想过这样的事情,所以也没有尝试过,但是flashbake https://github.com/commandline/flashbake/wiki 是设计成从cron运行的,可以使用某种合理的提交消息来执行你在第二段描述的操作。虽然我不确定原帖作者是否需要这个。 - Mark Longair
@Mark:有趣,谢谢。我已经在我的回答中包括了你的评论(以及一些额外信息)。 - VonC

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