【问题标题】:How to get the full context diff of two revisions of svn in a python script?如何在 python 脚本中获取两个 svn 修订版的完整上下文差异?
【发布时间】:2018-06-22 18:31:58
【问题描述】:

我正在使用 svn 命令编写一个 python 脚本来打印文件上 2 个 svn 修订的完整上下文更改日志(带有指示更改的完整文件)。

我在 svn repo 上有两个提交,我需要这两个版本的差异。 为此,我可以使用

svn diff -r <rev1>:<rev2>

但问题在于,这仅在更改的上下文中给出了几行。例如,如果我有一个 100 行的文件,并且我在第 50 行进行了更改,这将显示第 50 行的更改,并在其上方和下方显示 5-7 行。

我需要的是一个命令(或其他方式)向我显示完整文件,其中仅在第 50 行显示了更改。

还尝试使用提到的建议 here,但是对于我手头的场景来说,它似乎并不奏效。

感谢您对此上下文的任何帮助。

【问题讨论】:

    标签: python python-3.x svn tortoisesvn


    【解决方案1】:

    对于您提供链接的命令:

    svn diff --diff-cmd=diff -x -U10

    这里的--diff-cmd 表示您将使用第三方工具进行差异化。您要使用的第三方工具是diff。 所以首先你需要查看diff 工具是否安装在你的系统中并且在你的路径变量中。

    您可以通过在命令提示符或终端中键入以下内容来检查。 diff --help

    对于您的情况,因为您需要整个文件,您应该尝试以下命令:

    svn diff -r 34:35 --diff-cmd=diff -x -y &gt; somefile.txt

    在这里,您要求 svn 区分修订版 34 和 35,但使用名为 diff 的外部 diff 工具。使用-x,您告诉您将标志-y 传递给此外部工具并将输出存储在文本文件中。

    -y 标志告诉外部 diff 工具进行并排比较并在两列中输出数据。

    文本文件看起来像这样。这将是一个非常长的文件,因为它包含所有已更改的文件的全部内容。

    【讨论】:

    • 我尝试了你的建议,但是它给了我以下错误:svn: E720087: Can't start process 'diff': The parameter is wrong.
    • 另外,您在上面使用的外部差异工具是什么?
    • 我正在使用以下差异diff (GNU diffutils) 2.8.7Written by Paul Eggert, Mike Haertel, David Hayes, Richard Stallman, and Len Tower.Copyright (C) 2004 Free Software Foundation, Inc.
    • 您可以尝试删除修订命令并获取当前工作目录和提交版本之间的差异。 svn diff --diff-cmd=diff -x -y
    • svn diff -r : --diff-cmd=diff -x -u1000 > somefile.txt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多