哪个版本控制系统可以管理所有方面?[关闭]


17

几个月前,我钻研了Subversion和GIT,感到很失望。他们可以很好地处理源代码,但不能处理其他方面。例如,受版本控制的网站需要管理文件/目录所有权,文件/目录的读写访问权限,访问控制列表,时间戳,数据库内容。和外部链接。是否有一个版本控制系统可以像从一个月前的备份中重新加载一样完美地完成还原?


12
好像您要备份系统?
Macke

2
您是否考虑过在Mac上的OS X下运行网站?Time Machine可能是当前可用的最简单的备份解决方案,如果需要,可以很容易地回滚。

1
如果您对该主题非常感兴趣,则应该查看版本控制文件系统和版本控制数据库方面的研究,这些方面超出了源代码的版本控制系统的范围。
雅各布

编写一些脚本来处理scm无法处理的事情有什么问题?这样,您就可以得到想要的东西并在源代码控制下得到它。
Newtopian 2011年

Answers:


44

您对版本控制系统的角色感到困惑。它并非也永远不会成为正在运行的网站的备份系统。它在管理静态内容方面非常出色,因此它以受控方式进入了生产环境。通过正确使用标签和自动签出,甚至可以将快速更改的站点保存在版本控制系统中。

版本控制系统将能够告诉您如何从上个月的站点到今天的状态(至少对于受源代码控制的那些组件而言)。它应包括重建网站所需的一切(不包括动态内容)。正如其他人指出的那样,对权限和所有权的任何更改都应编写脚本,并且该脚本应包含在版本控制中。

网站的访问权限通常非常简单。(基本上,您需要确保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来限制对版本控制内容中特定区域的访问。但是,我倾向于在信任的基础上工作。通过版本控制,可以轻松查看谁在何时进行了操作。如果您不重新格式化文件,则很容易获得文件的带注释的历史记录,显示谁在何时添加了哪些行。


+1是从一开始就充实为什么这个问题是错误的原因。
Macke

2
+1不过,最好是提出问题,以便其他人可以从您的回答中受益。
奥利弗·克拉克

版本控制系统应该使我能够说“确定,请在这台另一台计算机上,从7月28日开始为我建立该站点”。版本控制比备份更有效,因为它可以跟踪更改。否则,是的,每日备份可以完成这项工作。
安迪·坎菲尔德

是的,我正在使用的修补程序是(a)完全没有版本控制,(b)生产站点是主站点,(c)每次更改时都存档,(d)存档脚本删除了ACL之类的垃圾,并且( e)安装脚本修复了其他垃圾文件之类的权限。但是,为什么没有人建立通用系统来做到这一点呢?版本控制系统可以跟踪所有这些内容,但是没有一个。
Andy Canfield

+1:好答案。但是,我想补充一点,没有版本控制系统可以跟踪这些内容,因为它们可能不会。权限和用户名是特定于主机的,其格式是特定于系统的;该工具无法自动将它们移植到不同的主机上,尤其是在不同的操作系统上。
Jan Hudec

10

所有的人,没有一个。

让源代码管理以问题的直接方式直接管理这些细节是一个坏主意。

但是,您可以编写bash脚本(* nix)或powershell脚本(Windows),以实现任何或所有这些目标。该脚本可以存储在源代码管理中。

然后,您可以将该脚本作为构建工件之一,并将其​​作为部署的一部分运行。


这个。完全拥有源代码的想法是,您可以将它们从VCS中拉出来,并使用它们来构建成品。
Blrfl 2011年

2

恕我直言,版本控制系统本身并不打算以这种方式使用。

但是我倾向于做的是确保您可以从源代码控制中获取一个版本,您只需要运行一个构建文件/ powershell文件,一切就可以重新运行。

为此,您需要:

  • 您的应用程序在源代码管理中依赖的所有库
  • 建立环境的构建文件
  • 有关环境要求的说明(您不想将sql server安装在源代码管理中)

1

我相信您需要的是配置管理工具。我用过的是木偶

报价给您:

管理文件/目录所有权,文件/目录的读写访问权限,

我已经用一行完成(确保用户存在,确保目录存在,等等)...

访问控制列表,

如果这是Windows ACL,则有针对Windows的特定CM工具...

时间戳记

木偶脚本中的一行中的touch unix命令可以再次为您完成此操作。

数据库内容。

那是建立在许多框架中的,是一项cron工作,以确保其他所有内容都存在?

和外部链接。

对此一无所知。

当然,在编写配置管理代码之后,您可能希望将其放入(或在涉及的系统中检索)版本控制系统上。您将不会摆脱那些:-)。


我不明白您的意思是“时间戳-木偶脚本的一行中再有一个Unix命令可以做到这一点”。在我的站点上,要获取站点版本,它将扫描整个站点树并返回最新文件的日期和时间。我希望我的版本控制“签出”为文件提供与签入时相同的时间戳,而不是设置为“现在”。如何在一个unix命令中做到这一点?
Andy Canfield

当然,您正在寻找“触摸”,请检查一下:en.wikipedia.org/wiki/Touch_(Unix)。通常,在签出现在时间时将应用该时间,但是如果出于某些原因您想要不同的时间戳,这就是解决方法。
Dimitrios Mistriotis 2011年

我实际上很喜欢您提出这个问题的理由,您想尽可能地自动化,这是“正确的方法”,您需要有关如何执行以及如何使用VCon​​trol以及不使用VCon​​trol的一些专门知识。我希望更多的业内人士在思考...
Dimitrios Mistriotis 2011年

0

有一个终极的版本控制系统,可以管理所有数字文档的各个方面。它叫做Xanadu,由西奥多·霍尔姆·纳尔逊Theodor Holm Nelson)于1960年创建,甚至在文件系统之类的东西还没有普及之前。因此,理论上所有问题都可以完美解决。实际上,Xanadu从未像Nelson所设想的那样实现,但是它启发了许多更专业的系统,包括Web和版本控制系统。尼尔森的作品仍然值得重新阅读-他们可能会回答为什么没有通用的VCS可以管理所有方面的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.