您应该对Web应用程序进行版本控制吗?


35

我最近与一位同事讨论了有关Web应用程序版本控制的问题。

我认为您根本不需要它,并且,如果您只想进行健全性检查以确认您的最新版本已经发布,我认为日期(YYMMDD)可能就足够了。

我在基地外吗?我错过了重点吗?我应该使用Web应用程序版本号吗

Answers:


31

如果您将同一Web应用程序转售给多个客户,则绝对应该对其进行版本控制。

如果这是一个只安装在一个位置的网站,那么需求就不那么迫切了,但仍然可能不会受到伤害。您也不太会遇到时区问题。诊断库版本1.0.2.25中的问题比查找2010年11月3日上午11:15创建的库要好得多


2
如果您将同一Web应用程序转售给多个客户,则绝对应该对其进行版本控制。100%正确!
Gopi 2010年

8
我不同意 无论版本与否,版本发布始终很重要。这是任何开发方法(不包括牛仔编码)的基本实践。
Martin Wickman 2010年

2
@Sri库马尔:是这里的关键词:)
马丁威克曼

2
@sri,堆栈跟踪高度依赖于版本。如果您有带有堆栈跟踪的错误报告,即使此后已经发布了较新的版本,您也必须能够快速且确定地拥有与该堆栈跟踪相对应的源代码。Java记录软件的现代版本甚至在stacktrace本身中显示版本信息。

1
@anna lear-我只是偶然地发现,我从未就日期问题对您做出回应。在YYMMDD版本中,示例“ 2010年11月3日上午11:15”的版本将被标识为101103。因此,它在日期之前被“版本化”。
John MacIntyre

12

如果您可以在应用程序的DLL上自动执行版本号,则不会有任何问题。这将帮助您跟踪版本。

通常,Web应用程序仅在托管它的一个位置发布,因此它不如桌面应用程序重要。如果适用,它可以帮助回滚,错误跟踪(即该版本是哪个版本)以及跟踪开发服务器,登台服务器和生产服务器之间的差异。

我会考虑使其自动化-这是一种您可以设置一次并在需要时使用它的东西。


自动化包括每个构建的VCS标签。AFAIK大多数构建系统现在都可以做到这一点。
JensG 2014年

9

您的用户并不在乎版本号,因为他们始终总是拥有最新和最好的发行版,但是您欠您自己(和您的团队)确切地知道正在运行的是哪个版本。最终,您的开发源与实时代码不同步,那么您绝对必须知道。因此,请在svn / git树中标记您的发行版本,并使用该标记标记网络应用。


1
绝对。您再也买不起未经版本转换的代码。即使版本是SVN / hg / git commit#。
保罗·内森

9

如果您有一个开发/测试实例,那么对于项目团队成员来说,查看他们正在测试哪个版本/修订版就非常重要。


4

除了其他人所说的,我还要补充一点,从市场营销的角度来看,版本控制也很重要。新版本是可以向潜在或现有客户销售的新产品。它使客户知道某些事物是“新事物”,并看到事物正在向前发展。它提供了不错的新功能分组。而且看起来更专业。


4

我说,对于琐碎的Web应用程序,您应该对其进行版本控制。这里有两个稍微不同的概念在起作用:

  1. 整体应用
  2. 个别档案

无论哪种情况,我都认为文件应具有单独的版本(或修订)编号。理想情况下,这将由版本控制系统自动处理。正如其他人所说的那样,引用文件的版本号比引用日期和时间要容易得多。

如果您有(或可能有)多个实时安装的应用程序,则应将其整体版本化。如果您有单独的开发环境和测试环境(这可能也是应该的),那么这也是一个好习惯。每个应用程序(或发行版)版本号是指特定版本号的单个文件的集合。尽管处理所有这些都是额外的负担,但签出特定版本要比使用特定修订版号的单个文件容易。


这使我想到了语言学的一个概念。有人说,如果您无法用某种语言表达某些内容,就无法考虑(用该种语言)。我想到了德语单词“ Schadenfreude”。通过引用该词来思考(和说出)“由于别人的不幸而感到喜悦”的概念要比定义它容易得多。这就是该单词开始在英语中流行的原因。

同样,版本号使在特定状态下更易于说(和思考)应用程序及其文件。如果您是一个人的团队,只处理一个应用程序,那么这可能不会有太大的不同。但是,随着事情变得越来越复杂,最好使用这些标签。


4

您应该使用来自构建服务器的构建ID对Web应用程序进行版本控制,并将该ID包含在所有错误报告中。

如果您必须修复在生产中当前不存在的较旧版本上报告的错误,这将使您及时返回。


1

从您的问题很明显,您已经想到了一个简单的 Web应用程序

  • 仅可通过Web GUI访问,而不能通过Web(-service)API访问。如果您有用户使用API​​访问该应用程序,则需要对其进行版本控制。如果更改API,则会破坏客户端,因此您需要同时维护不同版本的API。

  • 当时只有一个实例在运行。即使您只有Web管理员,如果您有更多安装,您也需要知道哪个客户正在运行哪个版本。

  • 具有可接受的停机时间以升级实时版本。数据库可能是一个巨大的问题。较新版本的重要更改随数据基础结构的更改而变化。如果您当时仅运行一个版本,则可能必须关闭旧版本,升级数据库,然后打开新版本。这导致应用程序停机。根据用户的数量和种类,这是可以接受的。


同意创建无版本的Web api非常无能,以至于大多数人不信任它。是的,我说的是该应用程序的一个实例。
约翰·麦金太尔

还请考虑第三点,该点对于单实例应用程序仍然有效。
OGrandeDiEnne 2014年

我读过这篇文章,尽管它绝对重要而且很棘手,但我不确定这是版本问题。这还不是部署问题吗?KWIM?
约翰·麦金太尔

是的,没有。(那是很久以前的事,但是我想..)关键是,如果您需要对代码进行版本控制,则很可能也需要对数据库结构进行版本控制。
OGrandeDiEnne 2015年

0
  • 仅在有限的安装基础上内部使用?
  • 还是有可能在野外拥有多个版本?

我们只有前者,因此只能使用版本号进行发布后的健全性检查。我们不必跟踪同时使用的多个版本。


0

如果您的Web应用程序由客户端和服务器中的多个模块组成,则应该对每个模块进行版本控制。并且应该为客户端和服务器上的模块版本的每个组合提供唯一的ID,该ID应该出现在所有日志记录和错误消息中。

通过使用该约定,始终可以重新创建Web应用在给定时刻所处的状态。

我认为,由于这些天的Web应用都是使用服务器,客户端和客户端双方的动态语言构建的,因此除非用户重新启动浏览器或手动重新加载页面,否则没有理由重新加载更新的Web应用。

仅应重新加载Web应用程序中的更新部件或模块,而不会影响应用程序的整体状态。

你为什么会问?好吧,通过强制实施,Web应用程序的设计将更加强大,正确并且可能更易于维护。如果Web应用程序始终要求同时进行服务器/客户端更新,则可能构建方式不正确。


0

是的,您应该对其进行版本控制!并且您的版本控制系统中应该有一个与版本号匹配的标签(例如subversion,git,mercurial等)。

标签允许您返回并进行分支。例如:当前的生产版本存在错误,但是您无法修复它,因为您机器上的代码还没有准备好推出。但是,如果您在RCS中标记了该代码,则可以在该标记处分支并修复生产环境中运行的确切版本的错误。


0

我个人认为无论如何都应该进行版本控制,但是对特定于网站的Web应用程序进行版本控制的一大好处是,它可以使对静态内容的更改更易于管理。

例如,假设您有一个mysite.css文件,该文件的未来有效期很长(通常希望这样做,以便将其缓存在每个页面的浏览器中)。如果您随后在该文件中更改样式,那么除非您曾经做过一些事情来从缓存中清除该文件,否则没有人曾经去过您的网站。

如果您要对网站进行版本控制,则可以将构建中的所有css引用更改为mysite.css?v = 1234之类的内容,这将使您保留较远的到期日期,而不必担心将来的更改,如在下一个构建中'将为mysite.css?v = 1235。


0

是的你应该。出于分发原因,此处给出其他答案。

但是我明白了,为什么你问这个问题。Web应用程序方法受成本驱动。它与传统的拆封方法相反,后者的成本包括物理介质,分发,安装,文档的硬拷贝,培训和技术支持。可以排除的任何事物均应排除。


0

为了清楚起见,我假设您正在谈论某种用户可见的版本号,而不是在开发中放弃版本控制。(如果您认为在开发中不需要版本控制,那么您错了,您确实需要版本控制)。

对于单主机项目,这不是绝对必要的,因为如果出现任何问题,您始终可以查看主机并确认实际运行的内容。不过,这有点不错,因为它可能会派上用场一次或两次。至于是否认为有用,完全取决于您。

对于多主机项目,它并不是真正的可选。不同的主机最终将具有不同的版本,您需要能够在用户端区分它们。

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.