2009-08-10 30 views
2

我想在一个基于脚本的开发系统中使用Subversion,并想知道如何处理我通常的情况(C#/。NET)。如何对非编译语言使用Subversion?

正常的日常更新/提交周期可以正常工作,因为这会改变修订的跟踪和比较。我希望得到一些建议来处理部署。

有了这个脚本系统,有没有涉及不同的构建步骤 - 相反,部署涉及直接上传选定的脚本到宿主应用程序。

修改脚本不一定包含在下一版本 - 他们的目的地可以是后释放,或再下一个。

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

更新

据我所知,没有标签,也没有变更表将是答案。

修改列表不是持久的(不要在资源库中不存在的),我需要一个解决方案,让很久以后的审查。

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

我希望能够从开始的一个空分支,可以根据需要放置特定的文件修订版。

更新2个

两个例子,展示我如何能够满足与其他工具featues这种情况。请注意,我并没有试图推广这些工具,因为我想使用Subversion,我只是想解决这个问题。

随着QVCS,我可以将标签应用于文件的具体修改实现我想要的结果。该标签将保留原来的位置,并附在该文件的修订版上。在任何时候,我都可以做一个干净的签出,进入一个空目录,并指定只复制具有指定标签的文件。

同样,StarTeam,我可以将标签应用到文件修订,并检查了只与标签文件。

+0

如果你需要一个空的分支/标签,只需要'svn mkdir' - Subversion中的分支和标签就是恰好位于特定位置的目录。 – Amber 2009-08-10 19:43:54

回答

4

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

这正是tags是专为。

+0

标签旨在成为特定修订的“友好名称”。它只适用于这种情况,如果操作系统正在寻找一个很好的方法来确定哪个版本添加了脚本。 – 2009-08-10 03:38:29

+0

请阅读我的答案nader中链接到的文章的“创建复杂标签”部分。 – Amber 2009-08-10 03:43:50

+0

+1是的,这是使用复杂标签的好例子。这样做时使用更改列表可能也很方便。 http://svnbook.red-bean.com/en/1.5/svn.advanced.changelists.html – 2009-08-10 03:55:31

6

您可以使用Subversion分支管理您的“未来”版本。当您做出将来发布的更改时,请将其提交给相应的分支。当需要将所有未来功能拉入主干时,合并分支。

这与使用Subversion与编译语言或实际上用于任何其他目的的工作流程并非完全不同。

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

+0

分支的问题是它包含*每个*文件。这对于编译系统来说非常合理(因为你必须编译所有的东西),但这正是我不希望的*,在这种情况下,我只想包含特定的指定(测试)文件。 – Bevan 2009-08-10 05:33:58

+1

我不明白你为什么需要将编译系统与其他任何文件集合区别开来。功能分支包含整个系统的视图,但与中继相比,某些文件可能会更新。将功能分支合并回主干时,功能分支中尚未更改的文件不会发生任何变化。尤其是,即使某些文件稍后在主干中进行了更新,功能分支的合并也不会对这些文件进行更改,而不会出错。这通常正是你想要的。 – 2009-08-10 10:43:33

+0

Subversion实现了“便宜的副本”,因此无论有多少文件或涉及多少存储空间,标记和分支几乎都没有时间,并且几乎没有额外的空间可用于标记/分支中可见的副本。您可以在分支包含单个Perl脚本的项目所需的时间相同的时间内创建包含一万个全分辨率桌面背景图像的分支。 – 2009-08-10 10:48:02

4

一个解决办法是使用svn mkdir(而不是svn copy),开始一个新的分支,然后选择复制我相信,SVN 1.6,你可以通过svn copy

+0

这可能是我需要的 - 我会试试看。 – Bevan 2009-08-11 03:22:03

+0

您也可以使用'svn diff'的'--summarize'选项来轻松识别您更改过的文件。 – 2009-08-19 01:16:32

1

的方式从你的主分支所需的文件外部指向单个文件。 所以,如果你愿意,你可以创建一个空树结构并定义一组外部参数,它将你想要的文件带入结构中。这会给你一种分支的“实时视图”。

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

不利的一面是,它很难切换到一个不同的分支(比如旧标签,因为新版本存在问题) - 您必须手动编辑所有外部定义。如果他们全都在同一个目录下,这可能不会成为问题,但如果你不得不寻找他们,这可能会很痛苦。其中有无关SVN -

上的文件的外部一些信息在SVN 1.6 release notes

2

我看到的问题是可用的。你想在发布分支中存储一些文件,但不是其他的。因此,要么分支整个版本目录,然后删除您不想在其中显示的文件;或创建一个新的空目录并复制你想要的文件。

就是这么简单。你不需要改变列表或标签或任何复杂的东西,也不需要颠覆系统就能猜出你想要的文件。就我个人而言,我会执行分支+删除选项,然后如果您决定要恢复文件,则可以在以后取消删除操作。

0

听起来你正在寻找有关特定脚本的元数据。因此,一种选择是将脚本存储为单独的文件,并使用svn properties。 Svn属性允许您存储与文件关联的键值对。例如,要镜像“标签”示例,您可以为每个决定包含在特定发行版中的文件创建一个属性。在这种情况下,请创建一个值为“true”的“2009年9月”属性。

然后,您可以在生成部署包时仅选择带有“September 2009”属性的文件。当你想追踪资料库修改随着时间的推移,以及产生的diff,看看这些变化是

使用标签和分支是有用的 - 但它是整个仓库的一个快照......