Subversion でファイルを無視するにはどうすればよいですか?
また、バージョン管理されていないファイルを見つけるにはどうすればよいですか?
(この回答は、SVN 1.8 および 1.9 の動作に合わせて更新されています)
2 つの質問があります。
「無視されたファイル」とは、ファイルが「バージョン管理されていない」としてもリストに表示されないことを意味します。SVNクライアントは、ファイルがファイルシステムにまったく存在しないふりをします。
無視されるファイルは、「ファイル パターン」によって指定されます。ファイル パターンの構文と形式は、SVN のオンライン ドキュメントで説明されています: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html「Subversion のファイル パターン」。
バージョン 1.8 (2013 年 6 月) 以降の Subversion では、ファイル パターンを指定する 3 つの異なる方法がサポートされています。例を挙げて要約すると次のようになります。
global-ignores
オプション:global-ignores
リストが他のユーザーと共有されることはなく、コンピューターにチェックアウトするすべてのリポジトリに適用されます。C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
の両方。HKLM
HKCU
~/.subversion/config
svn: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>
、 rootで を変更した場合は、 で変更して、子および子孫ディレクトリで上書きする.
必要があります。--recursive
コマンドライン構文が直感に反していることに注意してください。
svn ignore pathToFileToIgnore.txt
これはSVNの無視機能の仕組みではありません。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 の用語 (Windows エクスプローラーのメニュー システムで使用されている) が最初は誤解を招くものだったので、この配置全体が私を混乱させました。オプション。この投稿で、無視機能が SVN プロパティ機能とどのように結びついているかを説明できれば幸いです。とはいえ、GUI を使用する代わりにコマンドラインを使用して無視されるファイルを設定し、コマンドラインに慣れてから GUI を使用してプロパティを操作することをお勧めします。
このコマンドsvn status
は、無視されたファイル (つまり、RGAglobal-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
タダ!
次のコマンドを使用して、バージョン管理ファイルの下にないリストを作成します。
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
次に、ファイルを編集して、実際に無視したいファイルだけを残します。次に、これを使用して、ファイルにリストされているファイルを無視します。
svn propset svn:ignore -F ignoring.txt .
行末のドットに注意してください。プロパティが現在のディレクトリに設定されていることをSVNに伝えます。
ファイルを削除します。
rm ignoring.txt
最後にコミットし、
svn ci --message "ignoring some files"
次に、次の方法で無視されるファイルを確認できます。
svn proplist -v
TortoiseSVNを使用している場合は、ファイルを右クリックして [ TortoiseSVN / 無視リストに追加] を選択します。これにより、ファイル/ワイルドカードがsvn:ignore
プロパティに追加されます。
svn:ignore
ファイルのチェックイン時にチェックされ、一致するファイルは無視されます。Visual Studio .NET プロジェクトの次の無視リストがあります。
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
このリストは、TortoiseSVN / Propertiesのコンテキスト メニューにあります。
記事 .svnignore Example for Javaを見つけました。
例: Ruby on Rails の場合は .svnignore、
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
それとその後:
svn propset svn:ignore -F .svnignore .
.gitignore の例 .svnignore に使用できます
propeditを使用するときは、ファイルが無視リストから除外される原因となるため、末尾にスペースがないことを確認してください。
Linuxでtab-autocompleteを使用してファイルを作成した場合、これらは自動的に挿入されます。
svn propset svn:ignore 'file1
file2' .
また、Tortoise SVN を使用している場合は、次のことができます。
SVN の構成ファイルでグローバルな無視パターンを設定することもできます。
作業コピーでコマンドsvn statusを使用して、ファイルのステータスを表示します。まだバージョン管理されていない (そして無視されていない) ファイルの横には疑問符が表示されます。
ファイルを無視する場合は、svn:ignore プロパティを編集する必要があります。http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore にある svnbook の「バージョン管理されていないアイテムを無視する」の章を読んでください。 html . この本では、svn status の使用についても詳しく説明しています。