我在RTC中有一个文件(称为foo.c),我修改了该文件,并将其与其他一些更改一起签入到变更集(CS1)中。然后,我再次修改了该文件,并将其与其他更改一起检入到不同的更改集(CS2)中。
我现在遇到了一种情况,我想要将CS2传递给一个流,但RTC给了我一个错误,传递这将在流中产生间隙(因为CS1中的更改)。我还不想交付所有的CS1,因为它包含了一些不应该在构建中的更改。在CS1中对foo.c的原始更改是对#include的微小删除,并且不会影响其他任何内容。
有什么方法可以解决这个差距吗?
我在RTC文档中看到了一些关于应用补丁的东西,但我不明白它是怎么回事。
有没有一种方法可以将一个变更集拆分为多个变更集,这样我就可以只交付一个文件?
发布于 2012-05-23 03:27:39
自2012年以来的更新(以及最初的“变通办法”,即交付所有内容并恢复您不想要的内容):
请参阅this thread
在RTC4.0.5中,我们在尝试接受有差距的变更集时提供了额外的支持(在尝试修复后向端口时经常遇到)。在该功能的一个非常简短的摘要中,当您接受带有间隙的变更集时,您现在可以遵循间隙工作流,该工作流一次接受一个变更集,并且对于包含间隙的变更集,创建一个包含等效变更的新变更集(具有辅助可追溯性)。
这意味着用户将不必接受变更集“作为补丁”。与新的工作流程相比,将变更集作为补丁应用具有局限性。
此功能在RTC 4.0.5 'New & Noteworthy' page中进行了总结。
下面是一些演示此功能的视频:
这就是Locate Change Sets的特性:

在RTC5.0中,我们添加了一个"fill
gap“功能,在该功能中,将向用户显示填补空白的更改集,允许用户接受所有更改集或继续使用RTC4.0.5中提供的gap工作流。
此功能在RTC 5.0 'New & Noteworthy' page中进行了总结,用于填补空白的类包括(RTC5.0中提供的):
客户端: IWorkspaceConnection.findChangeSetsToAcceptToFillGap(...)服务器端: IScmQueryService.findChangeSetsToAcceptToFillGap(...)
这两个特性在"Improved Gap Handling for SCM“文章中都有详细的解释。

原始答案(2012)
有没有拆分变更集的方法?
我不这么认为,阅读changeset man page
零部件中的文件或文件夹不能是多个活动更改集的一部分。
当文件或文件夹包含在活动变更集中时,无论该变更集是否为当前变更集,对该文件或文件夹的所有变更都将成为该变更集的一部分,并且在包含该文件或文件夹的活动变更集完成之前,无法将对该文件或文件夹的所有变更显式检入到新的变更集中。
在CS1和CS2中有foo.c意味着CS1已经“完成”(本质上是冻结的),尝试拆分它是不好的。
补丁解决方案意味着:
(取消将重做更改添加到foo.c的附加更改)
参见"How do I remove a change set from a stream?“
Story 149483是为了增强这个繁琐的工作流程,而差距检测正在得到增强(Enhancement 24822)
OP timwoj的结论是:
我最终只是提供了所有的东西,然后颠倒了我不想要的。
发布于 2012-05-24 01:44:01
问题: CS1改变了foo.c,CS2进一步改变了foo.c。您只想交付CS2,但RTC告诉您这会引入差距。
解决方案:从CS2创建一个补丁,并挂起CS1和CS2。然后应用补丁,将其合并到您的工作区中,并签入更改,这将创建另一个更改集CS3,与CS2相同,但不依赖于CS1。您现在可以交付CS3了。
交付CS3后,您可以丢弃CS2并恢复CS1,这将需要您与CS3合并。
然后,您应该处于CS1构建于CS3之上的状态,并且您可以选择是否在将来交付CS1。
https://stackoverflow.com/questions/10707694
复制相似问题