在 subversion 中创建一个“标签”,指示下一个版本中应该包含哪些文件
Posted
技术标签:
【中文标题】在 subversion 中创建一个“标签”,指示下一个版本中应该包含哪些文件【英文标题】:Create a "label" in subversion indicating what files should be in the next release 【发布时间】:2009-06-15 00:10:07 【问题描述】:我使用 StarTeam 进行版本控制已经有一段时间了,但我正在转向 Subversion。我一直在阅读Subversion book,StarTeam 似乎有一个 Subversion 没有的主要功能——标签的概念。我知道 Subversion 有标签,但它们在 StarTeam 中的含义有所不同。在 StarTeam 中,我可以将一组文件标记为“准备构建”,然后只检查这些文件并将其包含在特定版本中。然后我可以创建一个冻结标签,指示该版本中包含哪些文件(类似于 Subversion 标记,除了它在那些特定的修订版上,而不是目录中的所有内容)。
有没有办法在 Subversion 中获得这样的功能?我知道您可以指定要标记的修订版本,但是在您拥有代码并即将发布,并发现错误或有人决定不应包含特定更改的情况下会发生什么。我知道您可以根据存储库和本地工作副本创建标签,但这涉及检查不应包含的文件的特定修订并创建标签。准备好构建“标签”后,您不会将该标签放在您不想要的文件的头部版本上。似乎没有任何自动方法可以为 Subversion 中的构建指定某些修订。这不是应该在分支中开发新功能的情况,但如果修订版位于主干(或您将制作标签的任何地方)中,则更多,但不应包含在内。它可能不需要恢复 - 更改可能是适当的,但在将来的版本中,而不是当前版本。如果您没有具有您需要的确切文件版本的特定修订,您似乎必须从存储库和您的工作副本手动混合和匹配。
在类似的情况下,如果您在 Subversion 中有不属于发行版并且不需要标记的文件怎么办。在 StarTeam 中,您不会将准备构建标签附加到它们,但在 Subversion 中,似乎所有内容都在目录中。有没有办法从构建和标签中排除这些文件?这是 svndumpfilter exclude 的用途吗?
简而言之,有没有办法只在标签中包含某些文件的特定修订,或者它必须是存储库中的特定修订,还是存储库和工作副本中的文件的手动混合?
【问题讨论】:
【参考方案1】:您在特定版本上进行分支或标记。您可以修改分支以使其包含您希望在该分支中进行的特定更改或更新。分支后,您可以更改任意数量的文件并仅为该分支更新它们。所以是的,您可以单独将文件更新为旧版本,然后将它们提交到分支。
【讨论】:
【参考方案2】:如果我正确理解了您的问题,我相信可以通过在发布之前的某个时间进行分支来处理(例如,在您希望包含在此版本中的所有主要功能都已完成时),然后仔细管理什么被合并到那个“发布”分支。 “主干”对新东西是免费的。例如,如果发现了一个错误,则可以 (a) 将其固定在主干上,然后决定是否也应将其合并到发布分支中;或 (b) 固定在树枝上。这是我们遵循的流程,它运作良好(但它也需要纪律和一定数量的正式流程)。
【讨论】:
【参考方案3】:Subversion 只允许以原子方式标记源代码树的整个修订版。您正在寻找的功能需要您的源代码控制和票务系统之间进行一些通信,该系统不仅维护要进行的更改,而且还维护为每个票证更改的文件
例如,Trac 使用提交日志中的语法 # 解析每个修订的提交日志,以便与任意数量的票证相关联。
您需要一个模块来维护与新版本相关联的票证,然后计算哪些文件将成为 delta 版本包的一部分。
【讨论】:
【参考方案4】:我认为你最好的选择是使用分支。根据您在新版本上的工作方式,您可以创建一个不用于主动开发的干净分支,或者保持主干清洁并使用分支进行主动开发。然后,当您拥有完成并准备好进行下一次构建的文件时,您只需将这些文件更改合并到干净的分支中。
假设我们在主干中工作,并发布 1.0 版。然后我们创建了一个名为 maint-1.0 的分支,没有人接触过它。我们继续在主干中开发,当我们完成某些特性或功能时,我们将这些更改的文件移动到 maint-1.0 分支中。请注意,您可能必须有两个工作副本,只需将更改的文件复制过来。进行实际合并需要合并所有更改,而不仅仅是特定文件。
最终结果是您的 maint-1.0 分支只有您在下一次构建中需要的更改。
【讨论】:
【参考方案5】:我认为其他答案几乎都在那里,但为了明确起见,发布分支可以很好地处理这种情况。
这个想法是在开发的早期从主干中获取一个分支(或从早期修订版 - 假设您想要所有内容直到您分支的修订版),并使用正常的合并机制来促进来自主干的修订释放。如果稍后确定某个修订(或一组修订)质量不佳,您可以恢复这些合并。您的合并跟踪(在乌龟中,这非常有效)向您显示包含的内容和尚未完成的内容,您可以跳过修订,将它们无序合并,并且通常会尽可能多地乱搞,以使您的构建工作。显然 - 乱序跳过和合并很可能会为您创造更多工作,因为您需要手动解决冲突 - 但它是一个可在您需要时使用的工具。
这比使用单个文件更有优势,因为整个功能集都可以根据需要提升/删除 - 您不必手动搜索不同的文件来从这里和那里删除更改。但这确实需要您有理智的提交和 cmets - 不要让您的开发人员提交“周五下午提交,以确保一切安全”。
【讨论】:
以上是关于在 subversion 中创建一个“标签”,指示下一个版本中应该包含哪些文件的主要内容,如果未能解决你的问题,请参考以下文章