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
の両方で。HKLM
HKCU
- Linux/Unix -
~/.subversion/config
- Windows (ファイルベース) -
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 の無視機能はそのようには動作しません。
- 最初は、次のように入力して 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
やったー!