svn - StarTeam用户的Subversion概念

标签 svn version-control configuration-management starteam

我想知道如何在SVN中执行以下常见的StarTeam任务

1.如何更新标签以包括仅1个文件的较新修订版?

在StarTeam中创建视图标签(类似于SVN中的标签)后-我能够在该视图标签中包含文件的较新版本-例如更新视图以仅包括该文件(不包括自创建该视图标签以来也已更改的其他文件)

2.如何基于另一个标签创建标签?

当发布某个版本时继续进行开发时,尽管已签入某些功能,但这些功能并未包括在内。在StarTeam中,我曾经根据先前的视图创建视图标签(再次类似于标签),然后执行我描述的操作问题1)。我了解在SVN中,我可以基于另一个标签创建一个标签,但是它是只读的,并且需要一个分支。但是我真的不需要分支。

3.如何签到/添加到现有标签?

在StarTeam中,视图标签位于主干/分支上,因此我可以在创建视图后检入文件并修改标签以包括它,而在SVN中,我必须检入分支

最佳答案

首先说一下我对StarTeam不熟悉,所以我可能不完全了解您要复制的工作流程。

Subversion本身不能区分标签和分支。按照惯例,标签只是您永远不会修改的分支。即使分支只是“svn复制”操作,也没有单独的“分支”功能。分支只是便宜的副本,而标记是仅按照惯例是只读的分支。 svn中的副本非常便宜,因此您无需担心创建分支的麻烦-标签并不比分支便宜。您可能需要阅读Creating a Branch上的文档。它进一步说明了事情...,并在方框中提供了有关“廉价副本”的部分。

根据您在StarTeam中对“查看标签”的使用,svn externals可能对您有用。我通常不喜欢它们,但这取决于情况。

更直接地回答您的问题...

1)这取决于文件中是否还有其他更改。是否要将一个修订中的更改合并到一个文件中?或1个文件的所有更改(多个修订,仅1个文件)。希望你是说前者。在这种情况下,通常的行为是合并

假设您有以下情形:

------------------------------------> /trunk
 |     | fix merged to 1.0 branch
 |     v
  \------------> /branches/1.0
    |  ^ |
    |    \ /tags/1.1  1.1 tag, fix released to customer(s)
    \ /tags/1.0 - 1.0 GA tag, release sent to customer(s)

你在树干上发展。在版本10中,您的产品已经准备好发布1.0!您使用以下方法创建分支:
svn copy /path/to/trunk /path/to/branches/1.0

然后,您可以继续在主干上进行开发,同时还要在1.0分支上进行一些额外的验证。准备好发货时,您可以创建一个标签:
svn copy /path/to/branches/1.0 /path/to/tags/1.0

此标签是一个冻结的时间点,与您要交付给客户的时间完全匹配。

您发现1.0版客户所需的bug /功能/更新已在主干上完成。就您而言,您已声明了对特定文件的更改。

假设更改发生在修订版15的主干中。然后,您需要做(从干净的/branches/1.0工作副本开始):
svn merge -c 15 /url/to/repo/path/to/trunk

在理想情况下,修订版的更改是独立的,并且需要修订版中的所有文件。有时还有一些您不想合并的东西。在这种情况下,合并后,将更改还原到您不想合并的文件,测试所有内容,然后提交。合并有一个缺点->还原一些文件->提交工作流,这是Subversion会记录合并的发生,但是您已经排除了合并的一部分。如果所讨论的分支不太可能进一步更改(或重新集成到另一个分支),则可能无关紧要,但是我更愿意为所需的1个文件中的更改创建补丁文件,并在情况下手动将其应用于分支像那样。我不确定cmd行语法,但我认为它会非常相似:

svn diff -c 15 / path / to / file(在repo或其他工作副本中)> my-patch.diff

并使用其他工具我通常在GUI中创建/应用补丁,因此具体细节将留给您练习。

完成此操作后,您将再次在分支机构附近创建一个新标签,其中将包含新的合并更改。

svn复制/path/to/branches/1.0 /path/to/tags/1.1

然后,您将拥有一个与旧标签相同的新标签,只是对1文件进行了更改。在#3中,我还将提到您可以重新创建标签(尽管这取决于您使用标签的目的是不是一个好主意)。
r,但只有在标记不代表出厂代码的情况下,我才会这样做。

2)实际上,由于按照惯例标签是只读的,因此另一个标签中的标签实际上并没有什么不同。但是,如果您改用第一个分支,然后在该分支上创建标签(如建议的那样),则以后可以在同一分支的基础上创建第二个标签(在提交其他更改之后),该标签将与第一个不同标记仅此后已应用于该分支的更改。

3)同样,您通常会使用分支。如果分支/标记仅在内部使用(我不要建议不要删除附带代码的发布标记,尽管它并不是真正的“丢失”,但通常不需要这样做-),您可以删除并重新创建标签。标签的使用者(工作副本)可以在标签被删除并重新创建后进行正常的“svn更新”,并且将继续正常工作,好像什么也没发生。当您只想更新代码时,该代码不能用于#1,而可以用于#2。诀窍是将标记和分支结合起来以实现所需的功能。如果您还使用此工具将其部署到网站或其他内容,则可以结合使用分支,标记和外部。

例如可以检出/ path / to / production,它具有/tags/1.0的外部入口,当您要应用修订时,请执行#2中的步骤并创建/tags/1.1并调整外部入口。或者,只需将其指向分支,而无需重新创建标签。

我希望这是一个半有用的开始。

关于svn - StarTeam用户的Subversion概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600998/

相关文章:

svn - TortoiseSVN 不要求身份验证?

svn - 如何使用 Sonar 重新分析项目的完整历史?

version-control - 有史以来最简单的源代码控制 - 你使用什么?

java - 在 Java 中支持 2 个版本的 API

c# - 如何从 web.config 中读取 system.web 部分

c++ - SVN repo http ://server/. ../和 svn ://server/. ./有什么区别

svn - Hudson - SVN 错误 : org. tmatesoft.svn.core.SVNException: svn: E200030: 无效表达式

version-control - 持续构建和敏捷 vs 经常提交

tomcat - 需要在单个实例上自动部署多个 Tomcat?

git SVN : fetching a recreated SVN branch without the wrong merge parent