【问题标题】:Can I get svn diff in sorted order?我可以按排序顺序获得 svn diff 吗?
【发布时间】:2015-08-02 10:10:33
【问题描述】:

如何让 svn diff 按底层更改文件的顺序排序?我看到了一些围绕它的讨论,没有任何最终解决方案。

我知道我可以获取已更改的文件列表,对其进行排序,然后逐个文件调用 diff 文件以获得我想要的。但是我一直在寻找更简单的东西,以防万一。

这是我要解决的最后一个用例。我在私有合并中进行了一些更改,然后合并到主干中。我想通过比较进入主干的更改与我的分支上的更改来验证我的合并。我在想我可以使用类似的东西在我的分支上获得差异

svn diff -r <change no at which branch was created>:HEAD --summarize <branch url>

并将其与行李箱上的差异进行比较。但是,差异不是按更改文件的排序顺序进行比较的。我知道我可以获取更改的文件,对它们进行排序并逐个文件获取两个分支的差异文件以进行此类比较。但是,在我尝试这条路径之前,我想知道是否已经存在任何可以解决/解决此类用例的问题。

【问题讨论】:

    标签: svn


    【解决方案1】:

    我写了几个脚本。第一个列出分支上更改的排序差异为:

    #!/bin/bash
    # argument 1: change at which branch was created
    # argument 2: branch url
    # argument 3: change at which the first checkin was made into the branch
    # this script produces sorted diff for changes in a given branch over specified change range
    
    fnames=`svn diff -r $1:HEAD --summarize $2 | sort`
    for f in $fnames
    do
      if [ "$f" != "M" ] && [ "$f" != "A" ] && [ "$f" != "MM" ]; then
        echo $f
        echo "=============================="
        svn diff $f@$3 $f
      fi
    done
    

    另一个为更改创建排序差异(在我的情况下用于中继检查):

    #!/bin/bash
    # argument 1: change number
    # this script produces sorted diff for given change number
    
    fnames=`svn diff -c $1 --summarize <trunk url> | sort`
    for f in $fnames
    do
      if [ "$f" != "M" ] && [ "$f" != "A" ] && [ "$f" != "MM" ]; then
        echo $f
        echo "=============================="
        svn diff $f@$(expr $1 - 1) $f@$1
      fi
    done
    

    这两个脚本的输出差异是我审查的清单。

    【讨论】:

    • 第二个脚本的一些简化:如果在排序之前剪切状态字符,则可以删除 iffor f in $(svn diff --summarize -c "$1" ^/ | cut -c 9- | sort)。我们可以在内部差异命令中使用-csvn diff -c "$1" "$f"
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 2012-08-23
    • 2022-12-14
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多