反转差异或补丁|| CVS差异

时间:2009-12-08 14:15:40

标签: diff cvs branch patch invert

在CVS中,我的工作副本(WC)位于某个分支上(我们称之为“foo”)。另一个开发者已经将其他更改检入foo。我想在我的WC和foo的上游状态之间做一个差异。通常,在主干(HEAD)中工作时,我只是做一个cvs diff,这很好。但由于某种原因,当在分支中执行普通的cvs diff时,diff是空的。当我尝试使用“cvs diff -r foo”时,差异显示,但它被反转 - 上游添加显示有缺点,上游删除显示有加号。

我怎么能:(1)让CVS以“另一种方式”进行区分(加上上游添加),或者(2)反转补丁(一般情况下)?

3 个答案:

答案 0 :(得分:3)

也许您可以通过使用patchutils包中的interdiff来完成。

我经常以这种方式使用它来查看给定文件的TRUNK上发生的变化:

cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null

答案 1 :(得分:2)

如果主要目的是检查中央仓库中的“内容有什么”,我建议您自己使用CVS查看器/浏览器/网络功能,您可以在更新前浏览并查看最新更改。但假设你所拥有的只是命令行CVS,我会尝试给你一个解决方案:)

所以,你在这里有一个分支foo来自A - > B,其中B是其他开发人员签到后的分支状态(在服务器上),A是您上次更新工作副本的状态。

在这种情况下执行简单cvs diff时,您会看到本地更改A 进行比较,因为A是您已检出的内容。本地CVS状态将显示每个文件来自foo分支上的A修订版,并且在区分CVS客户端时将从服务器下载该修订版。在你的情况下,我猜你没有本地更改,因为你的cvs diff是空的。

然后,当您执行cvs diff -r foo时,您将本地A(或A +更改)与服务器foo(当前位于B)进行区分 - 从服务器的BA+changes所需的更改与其他开发人员的签到完全相反,加上您自己的本地更改。

现在,如果你真的想知道B(或tip-of-foo)与A(你现在检查过的任何原始版本)的比较,我认为你要做的就是设置一个标签你的工作副本,然后将该标记与分支的状态区分开来。像这样:

cvs tag pistos_temp1
cvs diff -r pistos_temp1 -r foo
# And clean up by deleting the tag afterwards:
cvs tag -d pistos_temp1

答案 2 :(得分:0)

您可以尝试将文件从分支导出到某个临时文件,然后在工作副本和此临时文件之间进行差异。这似乎是最简单的方法。