我有一个用Python编写的简单博客应用程序,使用Django。我用Git来控制这个网站。该网站的主要内容是博客。博客条目存储在SQLite数据库中(不版本控制,但定期备份);一些条目包含图像和其他媒体(如PDF)。
我目前将此“博客媒体”与其他媒体(例如外部JavaScript代码和用于布局目的的图像)一起存储在存储库中 - 当然,所有这些都非常有条理。然而,我想到,由于以下几个原因,这不是一个好的策略:
所以我正在考虑从repo中删除这些文件,只是将它们复制到包含Python代码,模板,样式表等目录的服务器上的目录中。
然而,我想知道:在网站的回购中处理内容图像和其他媒体是否有“最佳实践”,而不是图像等,它们实际上是网站布局和功能的一部分?< / p>
详细说明,我看到在回购中保留网站的代码与在回购中保留网站的内容之间存在差异 - 我觉得也许内容应该与实际提供网站的功能的代码分开存储(特别是因为内容可能更频繁地更改,我看不到需要为“东西”创建新的提交,这对于网站本身的运行是不必要的。)
答案 0 :(得分:3)
让他们保持版本控制。如果他们永远不会改变,你就不会为此付出代价。如果他们确实改变了,那么事实证明你毕竟需要版本控制。
答案 1 :(得分:2)
最初,我会说不要将它们放在回购中,因为它们永远不会改变,但会考虑将您的网站移动到其他服务器或托管服务提供商的情况。你需要一种简单的方法来部署它,除非它不受版本控制,否则很多复制/粘贴都可能出错。如果/什么时候发生的事情,至少它是一次性的。
这不是一个真正的答案,而是需要考虑的事情。
答案 2 :(得分:2)
版本。为什么不?我版本的PSD和一切。但如果这让你畏缩,我就能理解。你应该对javascript和样式表进行版本控制,那些东西是代码(各种各样)。
现在,如果按照内容,您的意思是“我为博客帖子上传的图片”或“我在评论中使用的pdf文件”,那么我会说不 - 不要对它进行版本控制。这种内容在数据库或其他地方被考虑在内。但是徽标图像,精灵以及构成网站外观和感觉的东西应该绝对版本化。
如果你不相信,我会给你一个非常敏感的理由。有一天,你会希望你可以进入你的历史,看看你的网站5年前的样子。如果你对你的外观和版本进行了版本控制感觉到的东西,你将能够做到。答案 3 :(得分:1)
你完全正确两点。
您已得出正确的结论,即“内容图片”就是这样,并且在您的代码的版本控制中没有任何业务。
将您的内容图像与数据库一起备份。除非您希望“代码”只是您自己的博客站点,否则您不希望模糊两者之间的界限。
如果你想创建一个完全不同的博客怎么办?或者您的朋友都想要一个。您不会向他们提供包含所有内容的数据库副本。对于他们来说,拥有所有内容图像的副本也不会有任何用处。
答案 4 :(得分:0)
移动版本控制系统不能很好地处理二进制文件,可以说,如果它们没有改变,它就没有(小)差别。
您只需决定哪个更容易,在存储库和多步骤过程中备份它以添加image / pdf / whatever,或为它们维护一组单独的操作(包括备份)。就个人而言,我会让他们保持版本控制。如果你不改变它们,它不会伤害任何东西。为什么要担心不会造成伤害的事情?
答案 5 :(得分:0)
我认为您需要问问自己为什么要使用版本控制以及为什么要进行备份可能是因为您希望保护自己免受文件的丢失或损坏,并且在发生可怕的事情时您可以退回备份。
如果您使用版本控制和单独的备份系统,则会遇到分发问题,因为您网站的最新版本位于不同的位置。如果出现问题怎么办,那么你需要花多少精力来恢复原状呢?对我来说,拥有一个带有版本控制和备份的分布式系统似乎很多手动工作都不容易编写脚本。更重要的是,当出现问题时,你可能已经感到压力了。让恢复过程更加困难可能对你没什么帮助。
我看到它的方式,将静态文件放在版本控制中不会造成任何伤害。您必须将它们放在版本控制存储库或普通文件系统中的某些位置。由于您的静态文件永远不会改变,因此随着时间的推移它们不会占用更多空间,那么问题是什么?我建议您只需将所有内容置于版本控制之下,并使自己轻松自如。我个人会定期备份我的数据库,并将此备份提交给版本控制。通过这种方式,您可以将所有内容放在一个地方,如果发生灾难,您可以轻松地进行新的结帐/导出以恢复您的网站。
我已经建立了this网站。它有超过一个PDF文件和一切存储在版本控制下。如果服务器死了,我所要做的就是干净导出并重新导入数据库及其重新启动和运行的网站。
答案 6 :(得分:0)
如果您正在处理Web项目,我建议您为媒体创建一个虚拟目录。例如,我们在本地工作副本IIS中为/ images / / assets /等设置虚拟目录,该目录指向客户有权访问的开发/登台服务器。
这提高了源代码控制的速度(特别是使用像Visual Source Safe这样笨重的东西),如果客户在测试期间改变某些内容,这会自动反映在我们的本地工作副本中。