2

我想将 Subversion 与基于脚本的开发系统一起使用,并且想知道与我通常的情况 (C#/.NET) 有什么不同。

正常的日常更新/提交周期将正常工作,更改跟踪和修订比较也将正常工作。我想要一些建议的地方是关于部署的处理。

使用此脚本系统,不涉及明显的构建步骤 - 相反,部署涉及将选定的脚本直接上传到主机应用程序中。

对脚本的更改不一定包含在下一个版本中——它们可能注定要在那之后的版本中发布,或者在之后的版本中。

在一个理想的世界中,我希望能够将脚本分配到给定的版本中,比如“2009 年 9 月”版本,一旦它经过测试,然后用一个命令拉出该版本的所有脚本。

更新

据我所知,Tags 和 ChangeLists 都不是答案。

ChangeLists 不是持久的(不存在于存储库中),我需要一个允许稍后进行审查的解决方案。

标签实际上与分支相同 - 默认情况下它们包含所有文件,您只需选择哪些修订。

我希望有一种从空分支开始的方法,可以根据需要将特定文件修订版放入其中。

更新 2

两个例子,展示了我如何通过其他工具中的功能来应对这种情况。请注意,我根本不想推广这些工具,因为我想使用颠覆,我只是想弄清楚如何。

使用QVCS,我可以通过将标签应用于文件的特定修订来实现我想要的结果。该标签将保留在原位,附加到该文件的该修订版。在任何时候,我都可以做一个干净的检查,进入一个空目录,并指定只有具有指定标签的文件应该被复制下来。

同样,使用StarTeam,我可以将标签应用于文件修订并仅签出具有该标签的文件。

4

6 回答 6

6

您可以使用 Subversion 分支管理您的“未来”版本。当您进行旨在用于未来版本的更改时,请将其提交到适当的分支。当需要将所有这些未来功能拉入主干时,合并分支。

这与将 Subversion 与编译语言一起使用的工作流程并没有什么不同,或者实际上用于任何其他目的。

有关详细信息,请参阅 Subversion 手册的Common Branching Patterns部分。特别是,“功能分支”部分听起来最适合您的情况。

于 2009-08-10T03:28:19.590 回答
4

“在理想情况下,我希望能够将脚本分配到给定的版本中,比如“2009 年 9 月”版本,一旦它经过测试,然后使用单个命令提取该版本的所有脚本。 "

这正是标签的设计目的。

于 2009-08-10T03:26:07.630 回答
4

svn mkdir一种解决方案是使用(而不是)开始一个新分支svn copy,然后通过以下方式选择性地从主分支复制所需的文件svn copy

于 2009-08-10T06:12:43.720 回答
2

我看到了问题 - 这与 SVN 无关。您想将一些文件存储在发布分支中,而不是其他文件。因此,要么分支整个发布目录,然后删除您不想在其中显示的文件;或创建一个新的空目录并仅复制您想要的文件。

它就是这么简单。您根本不需要更改列表或标签或任何复杂的东西,也没有颠覆系统能够猜测您确实想要哪些文件。就个人而言,我会执行分支+删除选项,因为如果您决定确实想要恢复文件,您可以在以后撤消删除。

于 2009-08-10T08:23:03.663 回答
1

我相信使用 svn 1.6 你可以让外部指向单个文件。因此,如果您愿意,您可以创建一个空树结构并在其上定义一组外部对象,将您想要的文件引入结构中。这会给你一种分支的“实时视图”。

您也许可以直接从主干引用文件版本 - 或者您可以分层您的方法并使用发布分支来合并特定修订,然后在“实时视图”的外部引用该发布分支。这样,您通过合并修订来发布功能 - 保持正常的修订控制和合并历史记录,然后服务器上的 svn-update 会将这些文件拉入实时结构。

缺点是很难切换到不同的分支(比如旧标签,因为新版本中存在问题) - 您必须手动编辑所有外部定义。如果它们都在同一个目录中,这可能不是问题,但如果您必须四处寻找它们,则可能会很痛苦。

svn 1.6 发行说明中提供了一些关于文件外部的信息

于 2009-08-10T08:11:58.317 回答
0

听起来您正在寻找有关特定脚本的元数据。因此,一种选择是将脚本存储为单独的文件,并使用svn properties。Svn 属性允许您存储与文件关联的键值对。

例如,为了反映您的“标签”示例,您可以为您决定包含在特定版本中的每个文件创建一个属性。在这种情况下,创建一个值为“true”的“September 2009”属性。

然后,您可以在生成部署包时仅选择具有“2009 年 9 月”属性的文件。

当您想要随时间跟踪对存储库的更改并生成差异以查看这些更改是什么时,使用标签和分支很有用 - 但它是整个存储库的快照......

于 2009-08-11T03:59:56.113 回答