Subversion でファイルを無視するにはどうすればいいですか? 質問する

Subversion でファイルを無視するにはどうすればいいですか? 質問する

Subversion でファイルを無視するにはどうすればよいですか?

また、バージョン管理されていないファイルを見つけるにはどうすればよいでしょうか?

ベストアンサー1

(この回答は、SVN 1.8 および 1.9 の動作に合わせて更新されました)

質問が2つあります:

ファイルを無視としてマークする:

「無視されたファイル」とは、ファイルが「バージョン管理されていない」としてもリストに表示されないことを意味します。つまり、SVN クライアントは、そのファイルがファイルシステム内に存在しないものとみなします。

無視されるファイルは、「ファイル パターン」によって指定されます。ファイル パターンの構文と形式については、SVN のオンライン ドキュメントで説明されています。http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html「Subversion のファイル パターン」。

Subversion のバージョン 1.8 (2013 年 6 月) 以降では、ファイル パターンを指定する 3 つの異なる方法がサポートされています。以下に例を挙げてまとめます。

1 - ランタイム構成領域 -global-ignoresオプション:

  • これはクライアント側のみの設定であるため、global-ignoresリストは他のユーザーと共有されず、コンピューターにチェックアウトするすべてのリポジトリに適用されます。
  • この設定は、ランタイム構成領域ファイルで定義されます。
    • Windows (ファイルベース) -C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (レジストリベース) -とSoftware\Tigris.org\Subversion\Config\Miscellany\global-ignoresの両方で。HKLMHKCU
    • Linux/Unix -~/.subversion/config

2 -svn:ignoreディレクトリ(ファイルではない)に設定されるプロパティ:

  • これはリポジトリ内に保存されるため、他のユーザーにも同じ ignore ファイルが存在することになります。.gitignore動作方法と同様です。

  • svn:ignoreディレクトリに適用され、再帰的または継承的ではありません。ファイル パターンに一致する親ディレクトリのファイルまたは直下のサブディレクトリは除外されます。

  • SVN 1.8 では「継承されたプロパティ」の概念が追加されていますが、svn:ignoreプロパティ自体は直接の子孫ディレクトリ以外では無視されます。

      cd ~/myRepoRoot                             # Open an existing repo.
      echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
      svn status                                  # Check to see if the file is ignored or not.
      > ?    ./ignoreThis.txt
      > 1 unversioned file                        # ...it is NOT currently ignored.
    
      svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
      svn status
      > 0 unversioned files                       # ...but now the file is ignored!
    
      cd subdirectory                             # now open a subdirectory.
      echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
      svn status
      > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
      > 1 unversioned file
    

    (したがって、リポジトリのルートに./subdirectory/ignoreThis" " が適用されていても、ファイルは無視されません)。ignoreThis.txt.

  • したがって、無視リストを再帰的に適用するには、 を使用する必要がありますsvn propset svn:ignore <filePattern> . --recursive

    • これにより、すべてのサブディレクトリにプロパティのコピーが作成されます。
    • 子ディレクトリの値が異なる場合<filePattern>、子の値は親の値を完全に上書きするため、「加算」効果はありません。
    • したがって、<filePattern>ルートの を変更する場合は.、 で変更して、--recursive子ディレクトリと子孫ディレクトリでそれを上書きする必要があります。
  • コマンドライン構文は直感に反していることに注意してください。

    • 最初は、次のように入力して SVN 内のファイルを無視すると想定していましたがsvn ignore pathToFileToIgnore.txt、SVN の無視機能はそのようには動作しません。

3-svn:global-ignoresプロパティ。SVN 1.8 (2013 年 6 月) が必要です。

  • これは に似ていますがsvn:ignore、SVN 1.8 の「継承されたプロパティ」機能を使用する点が異なります。

  • と比較するとsvn:ignore、ファイル パターンはすべての子孫ディレクトリ (直下の子ディレクトリだけでなく) に自動的に適用されます。

    • つまり、継承された無視ファイル パターンは継承されると自動的に適用されるため、フラグsvn:global-ignoresを設定する必要はありません。--recursive
  • 前の例と同じコマンドセットを実行しますが、svn:global-ignores代わりに以下を使用します。

      cd ~/myRepoRoot                                    # Open an existing repo
      echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
      svn status                                         # Check to see if the file is ignored or not
      > ?    ./ignoreThis.txt
      > 1 unversioned file                               # ...it is NOT currently ignored
    
      svn propset svn:global-ignores "ignoreThis.txt" .
      svn status
      > 0 unversioned files                              # ...but now the file is ignored!
    
      cd subdirectory                                    # now open a subdirectory
      echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
      svn status
      > 0 unversioned files                              # the file is ignored here too!
    

TortoiseSVN ユーザーの場合:

この全体的な配置は私にとって混乱を招きました。なぜなら、TortoiseSVN の用語 (Windows エクスプローラーのメニュー システムで使用されている用語) が最初は誤解を招くものだったからです。無視メニューの「再帰的に追加」、「* を追加」、および「追加」オプションの意味がよくわかりませんでした。この投稿で無視機能が SVN プロパティ機能とどのように結びついているかが説明できればと思います。とはいえ、無視するファイルを設定するには、GUI を使用する代わりにコマンド ラインを使用して、その動作の感覚をつかみ、コマンド ラインに慣れた後にのみ GUI を使用してプロパティを操作することをお勧めします。

無視されるファイルのリスト:

このコマンドはsvn status、無視されるファイル (つまり、RCAglobal-ignoresパターンに一致するファイル、直下の親ディレクトリのsvn:ignoreパターンに一致するファイル、または祖先ディレクトリのパターンに一致するファイル) を非表示にしますsvn:global-ignores

これらのファイルを一覧表示するには、 オプションを使用します--no-ignore。無視されるファイルのステータスは です。I次に、出力を にパイプして、grep「I」で始まる行のみを表示します。

コマンドは次のとおりです:

svn status --no-ignore | grep "^I"

例えば:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

やったー!

おすすめ記事