ClearCase希望在交付到备用目标后合并未更改的文件

Jan*_*Jan 7 clearcase clearcase-ucm

将Rational ClearCase v.7.0.1.1与UCM一起使用时,我在使用ClearCase的"从流交换到备用目标"功能时遇到了问题.

想象一下,我们有一个项目集成流和两个从它派生的开发人员流A和B. 现在我在流A中更改了一个文件.我希望delevoper拥有流B能够使用我的工作而不必将文件传递到集成流,所以我从流A传递到备用目标流B.

到现在为止还挺好.我继续对文件进行另一次更改,但是流B开发人员不需要这个更改,所以我不会将它交给他.

经过一段时间,我将我的工作交付给主要的集成流.这很好,虽然我想知道为什么ClearCase将合并标记为正常的"合并"而不是"合并(平凡)" - 除了我之外没有人对文件进行了更改.

交付后,将在主集成流上创建新基线.

当开发人员B试图改变他的流时,会出现真正的问题.由于开发人员B从未对文件进行任何更改,因此我希望合并是一个简单的合并,无需进行任何交互.但是,开发人员B被迫以图形方式解决该文件上的合并冲突,让他在集成流上的基本版本,我提供给他的版本和我提供给集成流的版本之间进行选择.

在解决合并并完成rebase后,开发人员B想要执行到主集成流的交付时,会出现混淆.除了我最初交付给他的活动之外,他还被要求提供一项名为rebase _...的活动,我绝不期望提供交付.

我在这里错过了什么吗?我们是否错误地使用ClearCase或者这是一个已知的限制/错误?有没有人体验过这个功能?

在此先感谢您的帮助!

一月

Von*_*onC 7

实际上,当我查看版本树时,rebase期间冲突的来源是明确的:

版本树与冲突

当您重新阅读ClearCase 3-way merge的工作方式时,您会发现它需要返回版本树才能找到共同的祖先:

  • 来源(Int/2)
  • 目的地(B/1)

共同的祖先是Int/1

现在,这两个版本之间的公共线路可能已发生变化,因为:

  • 最后一个rebase(Int/2)的来源来自A/3
  • 最后一个rebase(B/1)的目的地来自A/2
  • 共同祖先(Int/1)来自A/1

如果在A/2和A/3中修改了公共线(来自A/1)......那么就有理由在那里进行手动合并解析!

(我现在正在测试这个)


得到它了!冲突实现了!

继续我以前的实验:

让我们在流A中创建一个新的modif:

M:\vonc_test_dat_a\adev\test>ct co -nc aFile.txt
M:\vonc_test_dat_a\adev\test>echo modif by A to B>>aFile.txt
M:\vonc_test_dat_a\adev\test>ct ci -nc aFile.txt

M:\vonc_test_dat_a\adev\test>type aFile.txt
first line done on Int
Second line from Int
Addition by A to be delivered to B first
Modification by A to be delivered to Int, B does not need it
modif by A to B
Run Code Online (Sandbox Code Playgroud)

直接交给B:

M:\vonc_test_dat_a\adev\test>ct deliver -to vonc_test_dat_b -target Test_DAT_B@\myPVob -cact -gmerge -force
Changes to be DELIVERED to non-default target stream in current project "Test_DeliverToAlternateTarget":
          FROM: stream "Test_DAT_A"
          TO: stream "Test_DAT_B"
Using target view: "vonc_test_dat_b".
Activities included in this operation:
        activity:test_dat_a@\myPVob   vonc        "test_dat_a"
Trivial merge: "M:\vonc_test_dat_b\adev\test\aFile.txt" is same as base "M:\vonc_test_dat_b\adev\test\aFile.txt@@\main\Test_DAT_Int\Test_DAT_A\2".
Copying "M:\vonc_test_dat_b\adev\test\aFile.txt@@\main\Test_DAT_Int\Test_DAT_A\3" to output file.
Deliver has merged

M:\vonc_test_dat_a\adev\test>ct deliver -target Test_DAT_B@\myPVob -cact -complete -force
Run Code Online (Sandbox Code Playgroud)

(琐碎的合并)

现在让我们COMPLETELTY更改该文件的内容:

M:\vonc_test_dat_a\adev\test>ct co -nc aFile.txt
M:\vonc_test_dat_a\adev\test>echo change first line>aFile.txt
M:\vonc_test_dat_a\adev\test>ct ci -nc aFile.txt

M:\vonc_test_dat_a\adev\test>type aFile.txt
change first line
Run Code Online (Sandbox Code Playgroud)

交付给Int后,在交付后立即提供新基线:

M:\vonc_test_dat_a\adev\test>ct deliver -force
M:\vonc_test_dat_a\adev\test>ct deliver -force -complete
M:\vonc_test_dat_a\adev\test>ct mkbl -comp ADV_TST@\myPVob -view vonc_test_dat_int TST_DAT1.2.0
Run Code Online (Sandbox Code Playgroud)

(另一个微不足道的合并)

来自B的变基怎么样?

M:\vonc_test_dat_b\adev\test>ct rebase -bas TST_DAT1.2.0
Advancing to baseline "TST_DAT1.2.0" of component "ADV_TST"
Updating rebase view's config spec...
Creating integration activity...
Setting integration activity...
Merging files...
Checked out "M:\vonc_test_dat_b\adev\test\aFile.txt" from version "\main\Test_DAT_Int\Test_DAT_B\3".
  Attached activity:
    activity:rebase.Test_DAT_B.20090707.163300@\myPVob  "rebase Test_DAT_B on 07/07/09 4:33:00 PM."
Needs Merge "M:\vonc_test_dat_b\adev\test\aFile.txt" [to \main\Test_DAT_Int\Test_DAT_B\CHECKEDOUT from \main\Test_DAT_Int\4 base \main\T
est_DAT_Int\3]
********************************
<<< file 1: M:\vonc_test_dat_b\adev\test\aFile.txt@@\main\Test_DAT_Int\3
>>> file 2: M:\vonc_test_dat_b\adev\test\aFile.txt@@\main\Test_DAT_Int\4
>>> file 3: M:\vonc_test_dat_b\adev\test\aFile.txt
********************************
---------[changed 1-4 file 1]----------|---------[changed to 1 file 2]---------
first line done on Int                 | change first line
Second line from Int                   |-
Addition by A to be delivered to B fir+|
Modification by A to be delivered to I+|
                                      -|
*** Automatic: Applying CHANGE from file 2 [line 1]
============
============
-----------[after 4 file 1]------------|----------[inserted 5 file 3]----------
                                      -| modif by A to B
                                       |-
Do you want the INSERTION made in file 3?  [yes] no
============
============
Output of merge is in "M:\vonc_test_dat_b\adev\test\aFile.txt".
Recorded merge of "M:\vonc_test_dat_b\adev\test\aFile.txt".
Build and test are necessary to ensure that any merges and configuration changes were completed correctly.
When build and test are confirmed, run "cleartool rebase -complete".
Run Code Online (Sandbox Code Playgroud)

你有它:来自共同祖先的两个不相容的变化之间的一个很好的冲突.

这是用于说明的图片:

合并期间的冲突

.

  • 嗯...这是通过横向合并支付的价格.另一个分支上的下一个3向合并将检测源*​​和*目标的变化,因此发生冲突.实际上,我想知道是否有任何其他3路合并功能的SCM会以不同的方式做到这一点?我将不得不用Git进行测试. (2认同)