SVN中的发布管理

17
当我查看 SVN 日志时,我真的希望能看到标记,告诉我何时进行了发布。我在其他版本控制系统中见过这种情况,例如 PVCS 和 Perforce
SVN 能做到吗?我已经做了一些研究,目前看来似乎不支持这种功能。
编辑
我们不想为每个发布将源代码复制到不同的文件夹中。这会导致开发人员机器上大量不必要的文件重复,并且只提供每个发布的修订号记录。我可以使用文本文档完成这项工作!
编辑2
我的目标是拥有一个单一视图,显示我发布的时间顺序,其中我可以看到每个发布之间发生的所有代码更改。这样就更容易编写发布说明了。

4
顺便提一下,这些副本很便宜——只复制引用,而不是文件——并且可以完全在服务器上完成,从不使您的本地工作区混乱。 - jcrossley3
2
开发者的机器上不应该检出“tags”目录。 ;) - Epaga
我不理解的是,如何在只检出了“主干”文件夹的机器上查看每个版本发布的修订号。 - Richard Ev
查看服务器上的代码库,而不是特定的工作副本。例如,TortoiseSVN有一个可视化的代码库浏览器。 - crashmstr
开发人员的机器也不应该检出整个/branches/文件夹。只需检出开发人员正在工作的分支和主干即可。 - oldwizard
显示剩余5条评论
13个回答

26

并不是这样的。在SVN中发布版本的一般做法是创建一个"tags"目录,每个特定版本的发布源代码都会拷贝到其中。例如:/tags/release-0.11 ... 基本上是没有什么可以防止你意外破坏tags目录的操作,但有些人会设置一些钩子函数来防止对发布标记的意外提交。

这里有一篇不错的文章介绍了如何在SVN中进行发布流程。


制作标签很便宜,因为SVN不会复制任何文件内容,除非它们被修改过。 - joeforker
Adam的相关文章是我找到的最好的理论和实际用例细节相结合的混合体。 - Paul Beusterien
这个链接有效:https://www.devroom.io/2006/11/21/svn-how-to-release-software-properly/ - user5248982
请注意,“发布管理”不仅仅是发布带有发布说明或更改日志的实际软件。该主题包括集成方面、数据隐私、质量、生产环境等方面。 - user5248982

21

Richard,标签非常接近,但我想知道你需要的是否不是专门的发布分支。

为此,请从主干早期创建一个名为“Release”的分支。然后像平常一样在主干上工作,当您准备好发布时,将您在主干上的更改合并到“Release”中。这是您应该修改发布的唯一方式。

如果您愿意,可以从“Release”中打标签,但这不是必需的。

但这将为您提供一个具有主干修订版本子集的分支。使用以下命令查找发布日期:

svn log --stop-on-copy svn://server/project/branches/release
这将提供一个带版本修订的发行日期列表。若要查看每个版本中包含的内容,请执行以下操作:
svn mergeinfo --show-revs=merged "svn://server/project/trunk" "svn://server/project/branches/release"@<release revision>

还要注意的是,通过这种方式工作,您不会被限制在严格顺序发布主干中的所有内容上 - 您可以挑选修订版本,如果您不想立即发布它们,则可以排除某些修订版本,但仍然包括随后的修订版本。


谢谢Jim T - 我觉得这可能就是我需要的! - Richard Ev
明确简洁,救命稳赢! - Doug Chamberlain
这也是我们使用的解决方案。我们主要遇到的难题是,当我们有工作提交到/trunk时,但它还没有被发布,这可能会导致繁琐的冲突解决。 - Daniel Becroft

6
我的目标是拥有一个单一的视图,可以展示我的发行版本的时间线,并且我可以在每个版本之间看到所有的代码变更。你是否研究过Tortoise SVN修订图?如果你给每个版本打上标签(正如其他人所指出的那样,这并不涉及在服务器或工作站上复制文件),那么你就可以按照时间顺序查看所有的修订版本,标签表示实际发布的版本。你可以通过选择感兴趣的两个版本并从上下文菜单中选择差异来对比发布版本和/或主干之间的差异。

4
将trunk复制到svn仓库中的tags路径是实现这一目标的方法。这是一个svn复制,因此不会在svn仓库服务器上产生文件副本。只有当您选择检出与trunk不同的svn路径时,本地才会有重复的文件。然后,在这些工作副本上进行的提交将返回到它们从中检出的svn路径。
这本质上是svn中分支的特定常规实现。请查看在线svn书籍以获取更多详细信息。

哦,对于懒惰的网络用户,在线svn书在http://svnbook.red-bean.com。 - jor
我不相信分支会对我的问题有帮助,原因在我编辑的问题中已经阐明。 - Richard Ev

3
标记是在发布标签时编写的提交消息(将svn复制到/tags)。至少这是最常用的方法。

你能告诉我更多关于这个提交信息的内容吗? - Richard Ev
这是我为一个项目所做的事情。构建机器会更新一个文件,在提交消息中插入构建号/版本。 - Tim

2
虽然Subversion本身并不提供发布管理,但版本控制工具通常不会负责此活动。您需要的是一种可以与Subversion交互的活动/问题/更改管理工具。
为此,我们在我的工作场所使用Jira并将其与Subversion链接起来。Jira提供了一个路线图和更改历史记录,其中包括每个发行版中的问题。每个问题都链接到源代码控制中的更改。因此,您可以将源代码中的更改与已发布的版本链接起来。
我认为最好将这两个工具分开使用。虽然Perforce尝试将两者绑定在一起,但只是简单地这样做。有些事情,比如向用户发送有关问题更改的电子邮件、向问题添加评论、向问题添加附件等,更适合在像Jira这样的专业软件中完成。另一方面,Jira在版本控制、合并和分支源方面并不是非常好...这些方面最好由像Subversion这样的专业软件处理。
完全公开透明,Bugzilla、Trac、IBM Rational Jazz等其他工具也可以像Jira一样使用Subversion,但功能不同。

1

请看SVN手册的这些主题:

标签浏览代码库

标签和分支是“写时复制”的,意味着在代码库中不会有额外的副本。通常情况下,除非需要进行分支开发,否则一个开发人员不需要本地副本。

如果为每个发布版本设置标签,则可以通过浏览代码库来查看标签。上面的链接直接讲述了命令行工具的使用方法,但是Windows上也有图形用户界面(GUI)工具,如TortoiseSVN。您可以获得历史记录、进行比较等等。

要查看发布版本所做的更改,只需显示从所需标签的修订版本到上一个标签修订版本+1的主干日志。一旦您习惯了这种方式,就会觉得很简单,而且并不需要太多额外的工作。

我们的构建工具还会将一些包含版本号信息的文件提交回主干,评论中包含构建的版本号。如果您的主要代码位于主干中,则这也可以作为版本标记(请在版本提交之间查看)。


1

使用提交信息+1。

为了一个项目,我创建了一个名为build的SVN用户。构建机器使用此登录名进行SVN操作。每当构建机器/进程进行构建时,它还会更新一个文件,并将SVN提交消息作为版本/其他标识符。然后,我们还为该构建创建了一个标记。这样,在主干中,我们可以看到构建何时/在哪里与其他更改交织在一起。

因此,我的建议(最简单的方法)是创建另一个名为build(或任何您想要的名称)的文件,并在构建脚本/进程中附加到该文件或仅对其进行修改,然后以发布版本名称作为提交消息将其检入/提交。简单明了。然后,它将显示在您的历史记录查询中。


0
如果按照正常的SVN约定,在存储库的根目录下设置“tags / branches / trunk”,开发人员通常不会想要检出整个存储库,只需从主干向下检出即可。

0
此外,如果您知道要比较哪些版本,可以进行 SVN diff,这样您就可以看到两个版本之间更改了哪些文件以及如何更改。
不确定您的总体设置,但有人提到 TortoiseSVN。那绝对是一个好的开始。我个人使用带有 subclipse 插件的 Eclipse,在图形环境中执行修订之间的差异。只要您拥有项目,您就可以将任何修订与任何其他修订进行比较,因此您不需要进行各种文件复制。
此外,我们通常在每个存储库中设置三个目录:分支、主干和标记。正如有人指出的那样,标记专门用于标识发布。

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