2013-05-07 23 views
7

私はsvn diff -c 789を使って、私たちのソフトウェアのリビジョン789で行った変更を示していますが、私が気にしない多くのファイル、特にテストファイルを表示しています。たとえば、パターン*Test.javaに一致するすべてのファイルなど、特定のファイルをdiffから除外することはできますか?svn diffから特定のファイルを除外するにはどうすればよいですか?

Windows上でCygwinを使用しています(重要な場合)。

+0

'SVN diff'から任意のファイルを除外することはできません。あなたが気にしないファイルからの変更をフィルタリング(また除外)するか、 'svn diff'の出力を解析するスクリプトを書くことを可能にするツールを使うことです。排除する。このようなスクリプトに興味がある場合は、オペレーティングシステムとシェルの環境に関する詳細を提供してください。 –

+0

@Adam私はWindows 7でCygwinを使用しています。 – MikeFHay

答えて

5

svn diffは、特定のファイルを出力から除外することを許可していないため、以下はその達成に使用できるBASHスクリプトです。除外されるファイルのsvn diff出力

  • patternで(例えばtest/*
    • fileと変化なしfileの内容を印刷します

      は、それは2つの引数を取ります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 
      

      更新

      私はこの仕事をしてツールに出くわした:filterdiff。ちなみに

      filterdiff svn_diff_file -x exclude_pattern

    +1

    これはいいですが、巨大な差分ファイルの場合は、すべての差分をフィルタリングするのではなく、目的のファイルに対して 'svn diff'を呼び出すほうが良いでしょう。そのような問題がある場合は、下記のVictorの答えをご覧ください。 – Martin

    3

    、のsvn diffは各コマンドは、標準入力と出力に含まを持っているUnixのモジュラー哲学を以下の他のコマンドとして作品をコマンドすることを覚えている:それは、使用量が上記のスクリプトと非常によく似ています。 インクルードしたいファイルを一覧表示するための独自のカスタマイズスクリプトを作成して、そのスクリプトの出力をパイプを使ってsvn diffコマンドにリダイレクトし、diffの出力を作成したいファイルにリダイレクトすることができます。 ただ、より明確にする:インクルードはあなたがスペースで区切っ差分に含めるファイルである。この例にchange_list.txt

    svn diff `cat change_list.txt` > patch.diff 
    

    に従ってください。

    "ドメイン/モデル/ entity.java"

    "web_app /コントローラ/ controller.java"

    ので、この方法を次の例では、ファイルの内容は、この可能性がありあなたの問題の唯一の難しさは、Adamが寛大に上で書いたようなスクリプトを実装するために削減されます。

    希望すると助かります!

    Vic。

    1

    これは私がやったことです:

    FILES=$(svn status some_dir|grep ^M|cut -b2-|grep -v dir_to_remove) 
    test -n "$FILES" && svn diff "$FILES" 
    
    関連する問題