6

在 CVS 中,我们的项目中有多个目录。有一个夜间构建,它必须从同一个 CVS 项目的不同目录中提取内容才能构建夜间构建。所以我应该记住这一点,如果我们迁移到 SVN,我必须修改构建脚本以从不同的存储库中检查内容。

我阅读了相关的 SVN QA,但我有自己的问题需要答案。
我可以:

/trunk
/tags
/branches
/3rdparty

我们开发的所有东西都来自/trunk,而我们不更改的任何 3rdparty 都来自/3rdparty。

很好,现在夜间构建脚本必须标记主干,签出标签,将所需的 3rdparty 内容签出到适当的目录中,然后开始构建过程。
构建结果(编译的东西)可以在 NFS 挂载上保留一段时间,因此集成团队可以返回 2 周并重新创建问题。

我的所有基地都覆盖了吗?

4

5 回答 5

9

此处的 SVN 红皮书包含大量有关不同项目类型的布局以及如何管理它们的信息。

您可能还想使用钩子/触发器/外部从称为“第三方”的独立存储库中提取数据。因此,当开发人员签出一个 repo 时,他也得到了第三部分。有很多方法可以分离关注点,但可以从组件中提供一个统一的 repo。

祝你好运

于 2009-07-17T17:56:09.553 回答
2

使用像哈德逊或巡航控制这样的构建引擎可能是值得的。工作流程略有不同 - 标签是在构建之后制作的,但您可以获得额外的模块来控制它。重点是,所有的开发工作都为你完成了,你得到了一个适合你的夜间构建的框架,你得到了一个很好的 Web 界面来控制和监控一切。

就个人而言,我会在主干上放置一些外部定义,以将适当的 3rd 方库拉入适当的位置。这样,当您更改 3rd 方库版本时,您对主干进行更改,而不必修改构建脚本。这也意味着您可以构建旧版本,只需检查适当的主干/标签/分支。被警告 - 只是在树干上做它们,将它们散布在周围可能会导致谋杀。

我还将回购分层有点像:

project
 /trunk
 /branches
 /tags
3rdparty

仅仅因为这为您在某个时候添加更多顶级项目提供了更多空间。这样做可以让您完全独立地管理不同的项目 - 如果存在依赖关系,您仍然可以使用外部引用从一个到另一个的正确版本 - 这很好地阻止了一个项目中的更改,默默地破坏/更改依赖项目。

也可以使用单独的 repos 来做到这一点,这很好,但在这种情况下,我会从一开始就将 3rdparty 部分单独放入一个单独的 repo 中。

于 2009-07-21T12:46:02.247 回答
1

你为什么不把第三者移到后备箱里?当您每个分支时,第 3 方的副本都会进入分支。显然,您不会更改分支中的第 3 方内容,因为您的分支已根据现有的第 3 方内容进行编码。

我不太确定标记你在说什么。你说的是版本号吗?如果是版本号,则通过脚本传递该版本并标记构建。

于 2009-07-17T18:00:21.620 回答
1

如果“多个目录”是您想要独立版本化的单独组件,那么您应该将每个组件放在自己的存储库中,以便可以单独标记它们。但是如果这都是一个独立的项目(即,如果您通常将所有组件标记和分支在一起),那么您可能可以将所有代码放在同一个存储库中。

您应该考虑对第三方工件 使用外部。

于 2009-07-18T01:35:59.277 回答
0

我的脚本检查主干,修改文件(调整 AssemblyInfo.cs 文件中的版本号等),然后对其进行标记。如果您不需要以任何方式修改文件,那么首先标记也很好。

除此之外,您的设置至少对我来说听起来不错。

于 2009-07-17T17:56:39.443 回答