几个月前,我钻研了Subversion和GIT,感到很失望。他们可以很好地处理源代码,但不能处理其他方面。例如,受版本控制的网站需要管理文件/目录所有权,文件/目录的读写访问权限,访问控制列表,时间戳,数据库内容。和外部链接。是否有一个版本控制系统可以像从一个月前的备份中重新加载一样完美地完成还原?
几个月前,我钻研了Subversion和GIT,感到很失望。他们可以很好地处理源代码,但不能处理其他方面。例如,受版本控制的网站需要管理文件/目录所有权,文件/目录的读写访问权限,访问控制列表,时间戳,数据库内容。和外部链接。是否有一个版本控制系统可以像从一个月前的备份中重新加载一样完美地完成还原?
Answers:
您对版本控制系统的角色感到困惑。它并非也永远不会成为正在运行的网站的备份系统。它在管理静态内容方面非常出色,因此它以受控方式进入了生产环境。通过正确使用标签和自动签出,甚至可以将快速更改的站点保存在版本控制系统中。
版本控制系统将能够告诉您如何从上个月的站点到今天的状态(至少对于受源代码控制的那些组件而言)。它应包括重建网站所需的一切(不包括动态内容)。正如其他人指出的那样,对权限和所有权的任何更改都应编写脚本,并且该脚本应包含在版本控制中。
网站的访问权限通常非常简单。(基本上,您需要确保Web服务器可以读取所有内容并只写很少的内容。)除了少数需要由Web服务器颠覆的目录(可能是git)可写的目录所有权以外,处理权限。Web服务器可写的目录通常包含动态内容(从网站创建和更新),该内容与网站源分开管理。
如果我被要求使用网站上具有复杂权限和ACL的网站,那么我将非常担心用于管理该网站的过程。实施版本控制系统并将ACL移至该版本控制系统将是我会认真考虑的解决方案之一。
动态内容(例如博客条目或评论)通常包含在数据库或其他数据存储区中,而不是用于构建站点的版本控制中。数据存储可以安排为提供其内容的版本控制(与本软件一样)。许多Wiki使用版本控制系统来跟踪修订。
编辑:
我正在使用的修补程序是(a)完全没有版本控制,(b)生产站点是主站点,(c)每次更改时都存档,(d)存档脚本删除了ACL之类的垃圾,并且(e)安装脚本可修复其他垃圾文件权限。
通过将站点导入版本控制系统并更改您的过程,以便通过该系统更新主站点,可以解决这些问题。(a),(b)和(c)由版本控制直接处理。您可能需要标记发行版,以使(c)更好地工作。(d)如果仅由部署系统更改站点,通常就不成问题。我从不需要网站内容上的ACL。
(e)仅应在初始创建和重大更改时运行。它还可能包含用于从版本控制更新站点并经常运行的脚本。当您将站点保持在厌恶控制系统中时,这些脚本往往非常简单。
但是为什么没有人建立通用系统来做到这一点呢?
因为如果使用版本控制系统,则不需要它。
版本控制系统可以跟踪所有这些内容,但是没有一个。
CVS和Subversion都可以跟踪使用它们时需要跟踪的内容。他们不会跟踪您需要跟踪的内容,因为您既没有使用版本控制系统,也没有使用它们。他们跟踪您在使用版本控制系统时需要跟踪的内容。
我曾与几个使用版本控制来管理其内容的站点合作。所有这些对暂存站点,部署频率和更新的完整性都有不同的要求。一旦站点处于版本控制中,就可以相对轻松地满足其余要求。CVS和Subversion的文档都为可能的更新方法提供了建议。
您可能需要ACL来限制对版本控制内容中特定区域的访问。但是,我倾向于在信任的基础上工作。通过版本控制,可以轻松查看谁在何时进行了操作。如果您不重新格式化文件,则很容易获得文件的带注释的历史记录,显示谁在何时添加了哪些行。
所有的人,没有一个。
让源代码管理以问题的直接方式直接管理这些细节是一个坏主意。
但是,您可以编写bash脚本(* nix)或powershell脚本(Windows),以实现任何或所有这些目标。该脚本可以存储在源代码管理中。
然后,您可以将该脚本作为构建工件之一,并将其作为部署的一部分运行。
报价给您:
管理文件/目录所有权,文件/目录的读写访问权限,
我已经用一行完成(确保用户存在,确保目录存在,等等)...
访问控制列表,
如果这是Windows ACL,则有针对Windows的特定CM工具...
时间戳记
木偶脚本中的一行中的touch unix命令可以再次为您完成此操作。
数据库内容。
那是建立在许多框架中的,是一项cron工作,以确保其他所有内容都存在?
和外部链接。
对此一无所知。
当然,在编写配置管理代码之后,您可能希望将其放入(或在涉及的系统中检索)版本控制系统上。您将不会摆脱那些:-)。
有一个终极的版本控制系统,可以管理所有数字文档的各个方面。它叫做Xanadu,由西奥多·霍尔姆·纳尔逊(Theodor Holm Nelson)于1960年创建,甚至在文件系统之类的东西还没有普及之前。因此,理论上所有问题都可以完美解决。实际上,Xanadu从未像Nelson所设想的那样实现,但是它启发了许多更专业的系统,包括Web和版本控制系统。尼尔森的作品仍然值得重新阅读-他们可能会回答为什么没有通用的VCS可以管理所有方面的问题。