如何按照底层更改文件的顺序对svn diff进行排序?我看到了围绕它的一些讨论,没有任何最终决议。
我知道我可以获取更改的文件列表,对其进行排序,然后按文件调用diff文件以获得我想要的内容。但是,如果可能的话,我正在寻找更简单的东西。
这是我想要解决的最终用例。我在私有合并中进行了一些更改,然后合并到trunk中。我想通过比较进入主干的更改和我的分支上的更改来验证我的合并。我以为我可以使用像
这样的东西在我的分支上获得差异svn diff -r <change no at which branch was created>:HEAD --summarize <branch url>
并将其与主干上的差异进行比较。但是,差异不是按此类比较的已更改文件的排序顺序。我知道我可以获取更改的文件,对它们进行排序并获取两个分支的文件差异文件以进行此类比较。然而,在我设置尝试它的路径之前,我想知道是否有任何解决/解决此类用例的问题已经存在。
答案 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
这两个脚本的输出差异是我的评论列表。