Svn 在subversion中看到多个提交的组合差异?

Svn 在subversion中看到多个提交的组合差异?,svn,Svn,我被要求查看SVN修订号123、178、199、245和288中所做的更改,这些都是与特定功能相关的提交。合理的方法是什么?我想我真的很想在某种程度上看到收集到的差异,但我愿意接受建议。我们现在是400版 编辑:我想知道如何在subversion中从命令行执行操作,但也欢迎任何在eclipse或intellij idea(或任何单独的应用程序)中工作的解决方案。我还特意对我实际希望实现的自动化/获得工具支持持开放态度,因为我真的不知道如何以智能的方式实现这一点 生成五个不同的提交,并将它们与fr

我被要求查看SVN修订号123、178、199、245和288中所做的更改,这些都是与特定功能相关的提交。合理的方法是什么?我想我真的很想在某种程度上看到收集到的差异,但我愿意接受建议。我们现在是400版


编辑:我想知道如何在subversion中从命令行执行操作,但也欢迎任何在eclipse或intellij idea(或任何单独的应用程序)中工作的解决方案。我还特意对我实际希望实现的自动化/获得工具支持持开放态度,因为我真的不知道如何以智能的方式实现这一点

生成五个不同的提交,并将它们与from组合。

的问题答案具有打印文件所有修订版收集的差异的功能。它可以很容易地进行修改,以打印您感兴趣的修订版的收集差异。

您没有指定是要将差异的基础设置在顶部,还是每个后续版本号(我不确定您为什么要这样做?(如果您不是有意的,请不要提交))


windows粉丝们,请不要投票给我,因为我的答案涉及bash shell而不是windows shell(尽管原始帖子从未提及操作系统)

我问了一个类似的问题,但没有得到满意的答案。我找到的最接近的解决方案是按照我提到的做,创建一个临时分支,并将有趣的提交挑选到该临时分支中。如果它们干净地结合在一起,那么整个三角洲就可以一次检查。如果它们不能很好地结合在一起,并且依赖于另一个不相关的变更,那么这可能意味着无论如何都应该对整个批次进行一次审查。

在IntelliJ idea中深入研究后,我找到了一个很好的解决方案:

选择版本控制|显示更改视图

在左侧,选择repository并单击要查看的所有修订


在右侧窗格中,您将获得受所选修订影响的所有文件的列表。当您选择“diff”时,您将看到所选变更集中的内部变更。提交中发生的内部重新工作没有显示出来(这是可以预料的)

尽管这个问题已经讨论很久了,但我今天实际上写了一个脚本,大致如下:


#!/bin/bash

REVISIONS=$@
LAST_REVISION="NULL"
MASTER="master"                             # path to WC

for THIS_REVISION in ${REVISIONS[@]};
do 
    if [ "$LAST_REVISION" != "NULL" ];
    then
        svn diff $MASTER -r ${LAST_REVISION}:${THIS_REVISION} --summarize | while read f;   
        do
            echo ${f#* } | sed "s/[a-zA-Z0-9:\/.]*$MASTER\///" >> "$LAST_REVISION-to-$THIS_REVISION.log"
        done
    fi

    LAST_REVISION=$THIS_REVISION
done
你可以把它叫做“my_diff_script.sh rev1 rev2 rev3 rev4”

产出将是:

rev1-to-rev2.log rev2-to-rev3.log rev3-to-rev4.log rev1-to-rev2.log rev2-to-rev3.log rev3-to-rev4.log
就我所能看到的而言,这个问题与我无关,或者我遗漏了你所看到的东西吗?编辑我的回答,说明为什么我认为另一个问题是有用的。这个问题的“问题”是,我必须看到正在进行的更改/返工的完整历史。假设所有五次提交都更改了同一行代码;当我阅读代码时,我总是阅读整行代码,所以所有早期的更改都可以被接受。我仍然对此感到困惑。如果稍后或最近的提交解决了中间解决方案(希望并且应该是,以更好的方式解决),那么为什么您会关心中间解决方案呢?正如您所建议的,我不关心在以后的提交中得到改进的内容。如果我将rev 123与HEAD区分开来,我会看到178与HEAD中发生的各种变化。但在123对HEAD中也会有一些东西不会改变。这让我难以置信。这会让对同一行代码的重复更改感到意外吗?太棒了!我从未听说过combinediff>combinediff创建一个表示两个差之和的统一差。所以我相信是的,它将抑制对同一行代码的相关更改。如果行号更改是因为其他提交在文件中的其他位置添加或删除了文本,该怎么办?combinediff只有要使用的差异的文本,它不可能正确组合非连续的差异。如果需要大量工作,这是一个不错的解决方案;)有趣的是,出于审查的目的,您通常对文件中哪些部分发生了更改的信息感到满意——真正的差异并不是我想要的。我会在更改的区域重新阅读完整的代码。如果我投你反对票,我会的。离开我的草坪,你们这些该死的孩子,用你们该死的gui!LOL;)+1添加到bash脚本中以获得此评论。@theman_on_vista刚刚尝试了IDEA的解决方案——它结合了变更集,而您的脚本只是将它们连接起来。给我一个脚本可以做到这一点,我将使用命令行:-)awesomeannswer。这就是我要找的 rev1-to-rev2.log rev2-to-rev3.log rev3-to-rev4.log