Subversionでファイルを無視するにはどうすればいいですか?
また、バージョン管理されていないファイルはどうやって見つけるのですか?
(この答えはSVN 1.8と1.9の動作に合うように更新されました)
2つ質問があります。
「無視されたファイル」とは、「unversioned」であってもファイルがリストに表示されないことを意味します。SVNクライアントは、ファイルがファイルシステムにまったく存在しないように見せかけます。
無視されたファイルは「ファイルパターン」によって指定されます。ファイルパターンの構文とフォーマットはSVNのオンラインドキュメントで説明されています: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Subversionのファイルパターン".
Subversionは、バージョン1.8(2013年6月)以降、ファイルパターンを指定する3つの異なる方法をサポートしています。以下は例をまとめたものです。
global-ignores
オプション:global-ignores
リストは他のユーザと共有されず、あなたがあなたのコンピュータにチェックアウトするすべてのリポジトリに適用されます。C:\Users\{you}\AppData\Roaming\Subversion\config
HKLM
とHKCU
の両方にSoftware\Tigris.org\Subversion\Config\Miscellany\global-ignores
があります。~/.Subversion/config
svn:ignore
プロパティ.gitignore
の動作と似ています。svn:ignore
はディレクトリに適用され、非再帰的または継承されています。ファイルパターンに一致する親ディレクトリのファイルまたはimmediateサブディレクトリは除外されます。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 ignore pathToFileToIgnore.txt
のような何かをタイプすることによってあなたがSVNのファイルを無視するであろうと仮定して始めました、しかしこれは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を使用してコマンドラインに慣れた後にGUIを使用します。
コマンドsvn status
は、無視されたファイル(つまり、RGAのglobal-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 にあります。
.gitignore のようにファイルまたはディレクトリを無視できます。無視したいディレクトリ/ファイルのリストのテキストファイルを作成し、以下のコードを実行するだけです。
svn propset svn:ignore -F ignorelist.txt .
テキストファイルを使用したくない場合は、次のようにします。
svn propset svn:ignore "first
second
third" .
記事.svnignore Java用の例を見つけました。
例:Ruby on Rails用の.svnignore、
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
それとその後:
svn propset svn:ignore -F .svnignore .
.gitignoreの例あなたの.svnignoreに使用することができます
誰もそれを言及していないようです...
svn propedit svn:ignore .
次に、ファイルの内容を編集して無視するパターンを指定し、エディタを終了すれば完了です。
Propeditを使用するときは、ファイルが無視リストから除外される原因となるため、末尾にスペースを入れないでください。
Linuxでtab-autocompleteを使ってファイルを作成する場合は、これらは自動的に挿入されます。
svn propset svn:ignore 'file1
file2' .
別の解決策は:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
または1行ずつ
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
それは何をしますか:
また、Tortoise SVNを使用している場合は、これを実行できます。
bkbilly's answer: の読みやすいバージョン
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
それは何をしますか:
SVN ignore
はTortoiseSVNで管理しやすいです。 TortoiseSVNを開き、ファイルメニューを右クリックして追加を選択してリストを無視します。
これにより、ファイルがsvn:ignore
プロパティに追加されます。ファイルをチェックインすると、svn:ignore
と一致するファイルは無視され、コミットされません。
Visual Studioプロジェクトでは、無視するために次のファイルを追加しました。
bin obj
*.exe
*.dll
*.pdb
*.suo
Comparetrap のSVNでソースコードを管理しています
SVNの設定ファイルでグローバル無視パターンを設定することもできます。
Subversionにディレクトリを追加し、そのディレクトリの内容を無視する
svn propset svn:ignore '\*.*' .
または
svn propset svn:ignore '*' .
作業コピーで svn status コマンドを使用してファイルのステータスを表示します。まだバージョン管理されていない(そして無視されていない)ファイルには疑問符が付きます。
ファイルの無視に関しては、svn:ignoreプロパティを編集する必要があります。svnbookの http://svnbook.red-bean.com/en/1.5/svn.advanced.props.specialにある「バージョン管理外の項目を無視する」の章を参照してください。 ignore.html 。この本はsvn statusの使い方についても詳しく説明しています。