2009-12-08 126 views
2

在CVS中,我的工作副本(WC)位于某个分支(我们称之为“foo”)。另一个开发者已将其他更改检入foo。我想在我的WC和foo的上游状态之间做一个差异。通常情况下,在后备箱(HEAD)工作时,我只是做一个cvs diff,这很好。但由于某种原因,在分支中执行简单的cvs diff时,diff是空的。当我尝试使用“cvs diff -r foo”时,diff显示出来,但它是反向的 - 上游添加显示为小数,上游删除显示为加数。 (1)让CVS以“另一种方式”(加上上游添加)或(2)反转补丁(一般情况下)来进行比较?反转diff或patch || CVS diff

回答

2

如果主要目的是检查中央回购库中的“最新情况”,我建议您自己定制一个功能强大的CVS查看器/浏览器/网络通道,您可以在更新之前浏览并查看最新更改。但是,假设你已经是命令行CVS,我会尝试反正给你解决:)

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

如果只是做在这种情况下一个普通的cvs diff,你会看到你的本地修改相比A因为A是你查了一下了。本地CVS状态将显示每个文件来自foo分支上的A修订版,并且在区分CVS客户端时将从服务器下载该修订版。在你的情况下,我猜你没有本地变化,因为你的cvs diff是空的。

然后,当你做你的版本比较本地A(或A +的变化)对服务器的foo(目前是B)一cvs diff -r foo - 从服务器的B让需要你的A+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 
+0

我们正在使用viewvc,但我们无法真正弄清楚如何使它在分支机构中很好地工作。它只能使用HEAD材质顺利运行。 总之,您的临时标签解决方案工作得很好,即使它有点笨拙(与非CVS解决方案相比)。谢谢。 – Pistos 2009-12-09 15:33:23

0

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

+0

这是一种方式,是的,但肯定有一个更好的办法。 :)我会打电话给这个“计划C”。 – Pistos 2009-12-08 14:54:15

3

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

我经常用这种方式来看看是什么在树干上改变给定文件:

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

从'man 1 interdiff': '要反转一个补丁,请使用/ dev/null作为diff2。' 这有帮助,谢谢。 :) – selurvedu 2016-07-20 00:28:53