我可以按排序顺序获取svn diff吗?

时间:2015-08-02 10:10:34

标签: svn

如何按照底层更改文件的顺序对svn diff进行排序?我看到了围绕它的一些讨论,没有任何最终决议。

我知道我可以获取更改的文件列表,对其进行排序,然后按文件调用diff文件以获得我想要的内容。但是,如果可能的话,我正在寻找更简单的东西。

这是我想要解决的最终用例。我在私有合并中进行了一些更改,然后合并到trunk中。我想通过比较进入主干的更改和我的分支上的更改来验证我的合并。我以为我可以使用像

这样的东西在我的分支上获得差异
svn diff -r <change no at which branch was created>:HEAD --summarize <branch url>

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

1 个答案:

答案 0 :(得分:3)

我写了几个脚本。第一个列出分支上的变化差异为:

#!/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

另一个为变更创建排序差异(在我的情况下为trunk checkin):

#!/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

这两个脚本的输出差异是我的评论列表。

相关问题