Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2314278
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2010-11-24 09:55:56

默认的合并工具是 diffmerge, 功能很少, 其中比较的功能个人觉得不直观, 与我一直大力举荐的Araxis相比差远了。

在Visual Studio 中调用Araxis,利用其比较/编辑/保存,然后将合并后的结果交给Visual Studio。是我理想中的工作方式。

有图有真相:

这只是最终的效果,不要以为出来了3方会谈的局面,就能成功实现这两个工具的集成了。工具的集成需要有一套对话机制。

下面是需要在VS中进行的设置:

最后的Arguments 中指定的内容是关键,但可惜这个窗口不能resize, 看不全。下面是完整内容:
/wait /swap /a3 /3 /title1:%6 /title2:%7 /title3:%8 %1 %2 %3 %4

这个方案是我在 Araxis的帮助中找到的,从这一点看它的帮助很全面很贴心,否则的要,要自己摸索出来这一套组合还是要花些时间的。

关键是 /wait, 有了这个参数, VS会等待你在Araxis中合并完, 并且关闭本次比较的子窗口(不需要关闭整个Araxis程序),注意上面有%1 .. %4共4个文件名出现, 从上面一张图中的结果可以看出,Araxis最多只能进行3个文件的同时比较,那么这第4个参数是干什么的?它是VS生成的临时文件名,用于让你的合并工具保存最终合并结果的,查看Araxis的文档,的确发现它可以接受一个额外的第4个文件名,文档中把它叫做mergeOutputFile,这样,在Araxis打开的3个文件中,你可以选中任何一个文件作为合并后内容的模板,在此基础上进行修改,同时修改多于一个的文件我不知道有什么后果,也懒得去琢磨,因为这样做没什么意义。最经常的修改方式,还是修改第1个文件--Yours的那个,或是第3个文件--Theirs的那个。

修改之后,直接在Araxis中按CTRL+S 保存,退出该合并窗口,Visual Studio会检测到你结束了合并,并把此次说的第4个文件的内容作为合并结果,自动从冲突文件列表中删除你刚才已合并完毕的文件,焦点放到下一个冲突的文件上。

上面命令行中的/wait参数, 目的是让Arasix与VS中建立同步和对话。
/3 是启动三个文件的对比。

如果自己手工指定比较合并工具与VS同步的话,需要理解%1 这些参数的含义,老实说,微软的解释并不直观,很容易混淆的,下面是我结果它默认的diffmerge工具试验出的结论:


其中的%2和%4 很容易混淆,两者都使用动词的过去式,让人以为是一个已完成的文件。其实这个Modified file是指未经修改的你的目标分支上的文件名,所有文件名中,只有这个文件是本来就在磁盘上存在的文件,其它的都是在临时目录下生成的临时文件名。

下面是我用 ProcExplorer探查默认的 diffmerge命令行得出的结果:
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\diffmerge.exe" /merge
"C:\Documents and Settings\Administrator\Local Settings\Temp\TFSTemp\vctmp627376"
"T:\zrf\PES\Makefile"
"C:\Documents and Settings\Administrator\Local Settings\Temp\TFSTemp\vctmp289839"
"C:\Documents and Settings\Administrator\Local Settings\Temp\TFSTemp\vctmp247349"
"Theirs ($/PES Ziggo (3.7.2-7)/PES/Makefile;C38791)" "Yours (Makefile;C36768)"
   
对照被合并的文件的各个ChangeSet, 可以看出:

    627376 是所谓 source, 即merge时的source branch的终点对应的版本。
    其中 289839 是所谓base, 即merge时的source branch的起点对应的版本。
    而 247349 合并后的文件。工具打开时它就有初始内容,该内容随着你在合并
    工作中的操作受到改变,最后退出合并工具时,保存该文件。VS会取该保存后
    的文件。作为合并的结果。

    其中 T:\zrf\PES\Makefile 是target文件,即要合并到的那个分支,磁盘上
    对应的文件。


阅读(1028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~