代码之家  ›  专栏  ›  技术社区  ›  Your Common Sense

反转diff或patch cvs diff

  •  2
  • Your Common Sense  · 技术社区  · 15 年前

    在cvs中,我的工作副本(wc)位于某个分支(我们称之为“foo”)。另一个开发人员检查了foo中的其他更改。我想在wc和foo的上游状态之间进行比较。通常,在后备箱(头部)工作时,我只做一个cvs diff,这很好。但是由于某种原因,当在分支中执行普通的cvs diff时,diff是空的。当我尝试使用“cvs diff-r foo”时,会出现diff,但它是反向的——上游的加法用减号表示,上游的删除用加号表示。

    我如何才能:(1)让cvs以“另一种方式”(加上上游添加)进行差异化,或(2)反转补丁(通常)?

    3 回复  |  直到 12 年前
        1
  •  2
  •   olsner    15 年前

    如果这样做的主要目的是检查中央报告中的“最近发生了什么”,我建议您为自己准备一个功能性的cvs浏览器/浏览器/web thingy,在更新之前,您可以浏览并查看最新的更改。但是假设您所拥有的只是命令行cvs,我将尝试为您提供一个解决方案:)

    所以,你这里有一家分店 foo 那是从 A -gt; B 在哪里 是另一个开发人员签入之后分支(在服务器上)的状态,以及 A 是您上次将工作副本更新到的状态。

    当只做一个普通的 cvs diff 在这种情况下,您将看到您的本地更改 相比于 自从 是您签出的。本地cvs状态将显示每个文件来自foo分支上的a修订版,当进行差异化时,cvs客户机将从服务器下载该修订版。在你的情况下,我猜自从你 CVS差异 是空的。

    然后,当你做一个 cvs diff -r foo 你和本地人不一样 (或A+更改) (目前在 )-以及从服务器的 给你的 A+changes 与其他开发人员的签入正好相反,加上您自己的本地更改。

    现在,如果你真的想知道b(或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
  •  3
  •   Matt Fenwick sagarcool89    12 年前

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

    我经常用这种方式查看给定文件的主干上发生了什么变化:

    cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null
    
        3
  •  0
  •   corvus    15 年前

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