Svn StarTeam用户的Subversion概念

Svn StarTeam用户的Subversion概念,svn,version-control,configuration-management,starteam,Svn,Version Control,Configuration Management,Starteam,我想知道如何在SVN中执行以下常见的星际团队任务 1。如何更新标签以仅包含一个文件的更新版本? 在StarTeam中创建视图标签(类似于SVN中的标签)后,我能够在该视图标签中包含文件的更新版本,例如,更新视图以仅包含该文件(而不包括自创建该视图标签以来也发生更改的其他文件) 2.如何基于另一个标记创建标记? 在发布版本时继续开发时,某些功能虽然已签入,但不会被包括在内。在StarTeam中,我曾基于以前的视图创建视图标签(同样,类似于标签)(然后按照问题1中的描述执行).我知道在SVN中,我可

我想知道如何在SVN中执行以下常见的星际团队任务

1。如何更新标签以仅包含一个文件的更新版本?

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

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

在发布版本时继续开发时,某些功能虽然已签入,但不会被包括在内。在StarTeam中,我曾基于以前的视图创建视图标签(同样,类似于标签)(然后按照问题1中的描述执行).我知道在SVN中,我可以基于另一个创建标记,但它是只读的,我需要一个分支。但我真的不需要分支,真的

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


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

让我先说我不熟悉StarTeam,因此我可能不完全理解您试图复制的工作流

Subversion本身不区分标记和分支。按照惯例,标记只是一个永远不会修改的分支。即使分支只是一个“svn复制”操作,也没有单独的“分支”功能。分支只是一个便宜的副本,标签是一个按惯例只读的分支。svn中的副本非常便宜,所以你不必担心创建分支的问题-标签并不比分支便宜。你可能想继续阅读文档。它进一步解释了一些事情……并且有一个关于“便宜副本”的方框部分

根据您在StarTeam中使用的“视图标签”,这可能对您的目的有用。我通常不喜欢它们,但这取决于场景

更直接地回答你的问题

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/功能/更新已经在trunk上完成。在您的情况下,您已经声明了对特定文件的更改

假设在修订版15中主干上发生了更改。然后(从干净的/branchs/1.0工作副本)执行以下操作:

在理想情况下,修订的更改是自包含的,并且需要修订中的所有文件。有时还有一些额外的东西你不想合并。在本例中,合并后,将更改还原到不希望合并的文件,测试所有内容,然后提交。合并->还原某些文件->提交工作流有一个缺点,即subversion将记录合并的发生,但您已经排除了合并的一部分。如果所讨论的分支不太可能进一步更改(或重新集成到另一个分支),这可能无关紧要,但我更喜欢为所需的1文件中的更改创建一个补丁文件,并在类似情况下手动将其应用到分支。我不是100%确定cmd行的语法,但我认为它会非常类似:

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

并用另一个工具应用。我通常在GUI中创建/应用补丁,因此具体细节将留给您作为练习

完成后,再次从分支创建一个新标记,该标记将包含新的合并更改

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

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

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

3) 同样,您通常会使用分支。如果分支/标记仅在内部使用(我不建议删除已发布代码的发布标记,尽管它不是真正的“丢失”,但通常不需要),您可以删除并重新创建标记。标签的使用者(工作副本)只需在删除和重新创建标签后执行正常的“svn更新”,就可以继续正常工作,就像什么都没有发生一样。这不能用于#1,但可以用于#2,当您确实只想更新标记时。诀窍是结合标记和分支来实现您想要的。如果您也使用它来部署toa网站或其他东西,您可以将分支、标记和外部功能结合起来

e、 g./path/to/production可以签出,其中有一个到/tags/1.0的外部条目,当您想要应用修复时,您可以执行#2中的步骤,创建一个/tags/1.1并调整外部条目。或者,就这样吧
svn merge -c 15 /url/to/repo/path/to/trunk