1. ホーム
  2. svn

[解決済み] Subversionでファイルを無視するにはどうしたらいいですか?

2022-03-14 15:28:21

質問

Subversion でファイルを無視するにはどうしたらいいですか?

また、バージョン管理されていないファイルを探すにはどうしたらよいですか?

解決方法は?

(この回答は、SVN 1.8 と 1.9 の動作に合わせるために更新されました)

2つの質問があります。

ファイルを無視するようにマークする。

無視されるファイルとは、quot;unversioned" としてリストに表示されないファイルのことです。

無視されるファイルは、"ファイルパターン"で指定します。ファイルパターンの構文とフォーマットは、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 - The svn:ignore プロパティで、ディレクトリに設定されます (ファイルではありません)。

  • これはレポ内に保存されるため、他のユーザーも同じ無視ファイルを持つことになります。と同じように .gitignore が動作します。
  • svn:ignore はディレクトリに適用され、非再帰的または継承されます。任意のファイルや 即時 親ディレクトリのサブディレクトリで、ファイルパターンにマッチするものは除外されます。
  • SVN 1.8 では "inherited properties" という概念が追加されましたが 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> の値が異なる場合、子ディレクトリの値が完全に親を上書きするため、 "additive"効果はありません。
    • そのため、もしあなたが <filePattern> ルート上の . で変更する必要があります。 --recursive を使用して、子ディレクトリと子孫ディレクトリに上書きしてください。
  • コマンドラインの構文が直感に反していることに注意します。

    • 私は最初、SVNでファイルを無視するには、次のように入力すると仮定していました。 svn ignore pathToFileToIgnore.txt しかし、これはSVNの無視機能が働く方法ではない。

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

  • と似ています。 svn:ignore ただし、SVN 1.8 の "inherited properties" 機能を使用します。
  • 比較対象 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 エクスプローラーのメニューシステムで使用されているもの)は、当初私にとって誤解を招くものだったからです。この投稿で、Ignore機能がSVN Properties機能とどのように結びついているのか、ご理解いただけたと思います。とはいえ、無視されるファイルを設定するには、GUIを使うのではなく、コマンドラインを使って、どのように動作するかの感触をつかむようにし、コマンドラインに慣れてから、GUIを使って、プロパティを操作することをお勧めします。

無視されるファイルをリストアップします。

コマンドは svn status は、無視されたファイル(つまり、RGAの global-ignores パターンにマッチするか、あるいは直接の親ディレクトリの svn:ignore パターンにマッチするか、あるいは、任意のエーサーディレクトリの svn:global-ignores パターンを使用します。

を使用します。 --no-ignore オプションを使用すると、これらのファイルが一覧表示されます。無視されたファイルは、ステータスが I にパイプで出力します。 grep で始まる行だけを表示するようにします。

コマンドは

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

ジャジャーン