代码之家  ›  专栏  ›  技术社区  ›  Tai Squared

在subversion中创建一个“标签”,指示下一版本中应该包含哪些文件

  •  4
  • Tai Squared  · 技术社区  · 15 年前

    Subversion book 而且,星际团队似乎有一个颠覆没有的主要特征——标签的概念。我知道Subversion有标签,但它们在StarTeam中的含义有所不同。在StarTeam中,我可以将一组文件标记为“准备构建”,然后只签出这些文件并将其包含在特定版本中。然后,我可以创建一个冻结标签,指示该版本中包含了哪些文件(类似于Subversion标记,只是它位于那些特定的修订版上,而不是目录中的所有内容)。

    有没有办法在Subversion中获得这样的功能?我知道您可以指定要标记的修订版本,但是如果您有代码并且即将发布一个版本,并且发现一个bug,或者有人决定不应该包含某个特定的更改,那么会发生什么情况呢。我知道您可以基于存储库和本地工作副本创建标记,但这涉及检查不应包含的文件的特定修订并创建标记。有了一个现成的“标签”,你就不会把这个标签放在你不想要的文件的头上。似乎没有任何自动的方式来为Subversion中的构建指定某些修订。这不是在分支中开发新功能的情况,而是在主干中(或在您将从中创建标记的任何地方)有修订的情况,但不应包括在内。它可能不需要恢复-更改可能是适当的,但在将来的版本中,而不是当前的版本中。如果您没有与所需的确切文件版本相匹配的特定修订版,那么您似乎必须从存储库和工作副本中手动进行混合和匹配。

    svndumpfilter排除

    简而言之,有没有一种方法可以只在标记中包含特定文件的特定修订,或者它必须是存储库中的特定修订,或者是存储库中的文件与工作副本的手动混合?

    5 回复  |  直到 15 年前
        1
  •  5
  •   Kieveli    15 年前

    可以在特定修订上进行分支或标记。您可以修改分支,使其包含您希望在该分支中进行的特定更改或更新。分支后,可以更改任意数量的文件,并仅为该分支更新这些文件。因此,您可以单独将文件更新为旧版本,然后将其提交到分支。

        2
  •  2
  •   luapyad    15 年前

    如果我正确理解了您的问题,我相信可以通过在发布之前的某个时间点(例如,在此时间点,您希望包含在该发布中的所有主要功能都已完成)进行分支,然后仔细管理合并到该“发布”分支上的内容来处理。“主干”是免费的新东西。例如,如果确定了一个bug,那么它可以(a)固定在主干上,然后决定是否将其合并到发布分支中;或(b)固定在树枝上。这是我们遵循的过程,它运行得很好(但它也需要纪律和一定数量的正式过程)。

        3
  •  1
  •   Babak Naffas    15 年前

    例如,Trac使用提交日志中的#语法解析每个修订的提交日志,以与任意数量的票据关联。

        4
  •  1
  •   glenc    15 年前

    我认为你最好的选择是使用分支。根据您在新版本上的工作方式,您可以创建不用于活动开发的干净分支,也可以保持主干干净并使用分支进行活动开发。然后,当您拥有已完成并准备好进行下一次构建的文件时,您将仅将这些文件更改合并到clean分支中。

    比如说,我们正在主干中工作,发布了1.0版。然后我们创建了一个名为maint-1.0的分支,没有人接触它。我们继续在主干中开发,当我们完成某些特性或功能时,我们将这些更改的文件移动到maint-1.0分支中。请注意,您可能需要有两个工作副本,只需将更改的文件复制过来即可。进行实际合并时,需要合并所有更改,而不仅仅是特定文件。

    最终的结果是,maint-1.0分支在下一个构建中只有您想要的更改。

        5
  •  1
  •   Jim T    15 年前

    我认为其他的答案基本上都在那里,但为了明确起见,发布分支可以很好地处理这种情况。

    与处理单个文件相比,这具有优势,因为可以根据需要升级/删除整个功能集—您不必手动查找不同的文件,从这里或那里删除更改。但这确实需要你有理智的承诺和评论——不要让你的开发者承诺“周五下午承诺,这样一切都安全”。