4

Is there a better way to implement code freeze in SVN than asking all developers to not check in any new code?
We have CruiseControl running, which automatically deploys the latest build to environment. So if new code comes in, the build that was made available earlier changes to the latest one. I want that the build that is deployed is the one from a particular branch/tag, so that any new code check-ins dont affect the deployed build. Only when i tag/branch next time, the new code should be again deployed. How can we achieve this?

4

5 回答 5

14

Use SVN's built in branching functionality. The following link shows you all the details on how to branch (you can also use tags if you prefer): http://svnbook.red-bean.com/en/1.1/ch04.html

于 2009-01-07T03:54:57.173 回答
2

做你正在谈论的事情的颠覆约定是创建一个标签。当然,标签与分支没有什么不同,因为它只是某个版本的某个开发线的副本(通常......有复杂的标签)。然而,颠覆的最佳实践是标签被创建一次并且永远不会被提交——它们只是快照。

因此,我的建议是在您想要冻结的修订版上标记您的构建,与您的所有开发人员沟通,不要对该标签进行任何提交(如果他们还不知道),并从该标签构建你的版本。如果有人承诺标签,请举起地狱。

于 2009-01-07T14:23:55.797 回答
1

使用稳定的分支和 Subversion >=1.5(服务器、存储库格式和客户端)。

从 Trunk 创建一个分支并将其指定为您的稳定分支。禁止您的开发人员提交到此分支,最好使用您可用的任何权限的 authz 文件。

制定一项策略,确保在部署之前将任何代码更改提交到 Trunk,即使这些更改源自单独的分支。

让巡航控制从指定的稳定分支而不是主干监视、构建和部署。

当需要部署新软件时,使用 subversion 的合并功能从主干合并到分支中。始终以这种方式合并,仅从主干合并,合并跟踪(仅 1.5 及更高版本)将确保您可以从主干中挑选并仅包含您想要的更改,同时排除您不想要的内容。它还可以让您直观地检查当前版本包含哪些修订版以及排除哪些修订版。

合并并检查结果后,提交代码将导致 Cruise Control 发布 - 因此发布仅发生在受控点。

如果您需要回滚到以前的版本,请从您的稳定分支的所需修订版创建一个标签,并暂时将 Cruise Control 指向该版本而不是您的稳定分支,当您解决了稳定分支上的问题后,您可以再次从稳定分支部署,而不是标签。

您可能希望在问题发生之前主动制作标签,可能会自动使用 CruiseControl,以便在您需要切换时标签已经到位。

除了修复合并冲突或合并来自除主干以外的位置的更改之外,不要在稳定分支上进行任何开发 - 很难准确判断部署了什么。

于 2009-01-07T13:51:04.910 回答
1

如果您更愿意强硬,您可以通过 pre-commit 挂钩脚本禁用任何提交。由于历史原因,我们保留了一些停放的存储库,因此不需要新的提交。这就是我们冻结这些回购的方式。


#!/bin/sh
exit 1

它们仍然可以被访问和签出,但所有新的提交都将失败。因此,在您的情况下,您可以有一个进程在构建过程的时间表上锁定存储库。

于 2009-01-07T06:07:55.767 回答
1

当然,访问机制也有阻塞——例如调整 authz 文件。

于 2009-01-07T06:25:45.340 回答