如何从svn diff中排除某些文件?

Mik*_*Hay 10 svn diff

svn diff -c 789用来显示我们软件的修订版789所做的更改,但它显示了很多我不关心的文件,特别是测试文件.如何从diff中排除某些文件,例如所有与模式匹配的文件*Test.java

我在Windows上使用Cygwin,如果这很重要的话.

Ada*_*ion 7

由于svn diff不允许从输出中排除特定文件,下面是一个可用于实现该目的的BASH脚本.

它需要两个参数:

  • filesvn diff输出
  • pattern要排除的文件(例如test/*)

file从匹配的文件中打印出没有更改的内容pattern.

#!/bin/bash

test $# -ne 2 && echo "Usage: $0 svn_diff_file exclude_pattern" && exit 1

ignore=0
while IFS= read -r line; do
    echo $line | grep -q -e "^Index: " && ignore=0
    echo $line | grep -e "^Index: " | grep -q -e "^Index: $2" && ignore=1
    test $ignore -eq 0 && echo "$line"
done < $1
Run Code Online (Sandbox Code Playgroud)

更新

我刚刚遇到了一个完成这项工作的工具:filterdiff.它的用法与上面的脚本非常相似:

filterdiff svn_diff_file -x exclude_pattern