2

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

我怎样才能:(1)让 CVS 以“另一种方式”区分(加上上游添加),或者(2)反转补丁(通常)?

4

3 回答 3

3

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

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

cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null
于 2012-03-01T09:20:59.853 回答
2

如果这样做的主要目的是检查中央存储库中的“最新情况”,我建议您自己准备一个功能齐全的 CVS 查看器/浏览器/网络,您可以在其中浏览并查看更新前的最新更改。但是假设你只有命令行 CVS,我还是会尝试给你一个解决方案 :)

因此,您在这里拥有的是一个fooA->开始的分支B,其中B是其他开发人员签入后分支的状态(在服务器上),并且A是您上次将工作副本更新到的状态。

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

然后,当您执行 a 时,cvs diff -r foo您将本地A(或 A+更改)与服务器foo(当前位于B)的差异 - 从服务器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
于 2009-12-08T23:29:13.317 回答
0

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

于 2009-12-08T14:25:54.703 回答