web-dev-qa-db-ja.com

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

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

また、バージョン管理されていないファイルはどうやって見つけるのですか?

603
andyuk

(この答えは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つの異なる方法をサポートしています。以下は例をまとめたものです。

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

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

2 - ディレクトリ(ファイルではない)に設定される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の無視機能が機能する方法ではありません。

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を使用してコマンドラインに慣れた後に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

ただ!

703
andyuk

バージョン管理ファイルの下にないリストを作成するには、次のコマンドを使用します。

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
83
ulitosCoder

TortoiseSVN を使用している場合は、ファイルを右クリックし、 TortoiseSVN /追加を選択してリストを無視します これにより、ファイル/ワイルドカードがsvn:ignoreプロパティに追加されます。

ファイルをチェックインするときにsvn:ignoreがチェックされ、一致するファイルは無視されます。次のVisual Studio .NETプロジェクトの無視リストがあります。

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

このリストはコンテキストメニューの TortoiseSVN/Properties にあります。

47
artur02

.gitignore のようにファイルまたはディレクトリを無視できます。無視したいディレクトリ/ファイルのリストのテキストファイルを作成し、以下のコードを実行するだけです。

svn propset svn:ignore -F ignorelist.txt .

テキストファイルを使用したくない場合は、次のようにします。

svn propset svn:ignore "first
 second
 third" .

ソース:Karsten's Blog - svnを設定する:コマンドラインから複数のファイルを無視する

36
Adrian Enriquez

記事.svnignore Java用の例を見つけました。

例:Ruby on Rails用の.svnignore、

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

それとその後:

svn propset svn:ignore -F .svnignore .

.gitignoreの例あなたの.svnignoreに使用することができます

https://github.com/github/gitignore

21
d.danailov

誰もそれを言及していないようです...

svn propedit svn:ignore .

次に、ファイルの内容を編集して無視するパターンを指定し、エディタを終了すれば完了です。

16
Yorick

Propeditを使用するときは、ファイルが無視リストから除外される原因となるため、末尾にスペースを入れないでください。

Linuxでtab-autocompleteを使ってファイルを作成する場合は、これらは自動的に挿入されます。

svn propset svn:ignore 'file1
file2' .
10
Kenneth

別の解決策は:

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

それは何をしますか:

  1. Svnからステータスファイルを取得します
  2. すべてのファイルを で保存します。 "svnignore.txt"ファイルへ
  3. すでに無視されているファイルを取得し、それらをファイル "svnignore.txt"に追加します
  4. "svnignore.txt"内のファイルを無視するようにsvnに指示します
  5. ファイルを削除します
8
bkbilly

また、Tortoise SVNを使用している場合は、これを実行できます。

  1. コンテキストメニューで[TortoiseSVN]を選択し、次に[プロパティ]を選択します。
  2. 表示されたウィンドウで[新規]をクリックし、次に[詳細設定]をクリックします。
  3. 「プロパティ名」の反対側に表示されるウィンドウで「svn:ignore」を選択または入力し、「プロパティ値」とは反対に希望のファイル名またはフォルダ名またはファイルマスクを入力します再帰的なプロパティ」
  4. OK。 OK。
  5. コミット
7
msangel

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

それは何をしますか:

  1. Svnからステータスファイルを取得します
  2. ですべてのファイルを保存しますか? "svnignore.txt"ファイルへ
  3. すでに無視されているファイルを取得し、それらをファイル "svnignore.txt"に追加します
  4. "svnignore.txt"内のファイルを無視するようにsvnに指示します
  5. ファイルを削除します
5
LivingDust
  1. cd〜/ .Subversion
  2. オープン設定
  3. 'global-ignores'のような行を見つけてください
  4. 無視するファイルの種類を次のように設定します。global-ignores = * .o * .lo * .la * .al .libs * .so .so。[0-9] * .pyc * .pyo 88 * .rej 〜# #。#*。*。swp .DS_Store node_modulesの出力
4
范陆离

SVN ignoreはTortoiseSVNで管理しやすいです。 TortoiseSVNを開き、ファイルメニューを右クリックして追加を選択してリストを無視します。

これにより、ファイルがsvn:ignoreプロパティに追加されます。ファイルをチェックインすると、svn:ignoreと一致するファイルは無視され、コミットされません。

Visual Studioプロジェクトでは、無視するために次のファイルを追加しました。

bin obj
*.exe
*.dll
*.pdb
*.suo

Comparetrap のSVNでソースコードを管理しています

3
Slack

svn statusはどのファイルがSVNにないのか、そして何が変更されたのかを教えてくれます。

SVNプロパティ ignoreプロパティを見てください。

すべてのもののためにSVN、 レッドブック は読むことを要求される。

3
DGM

SVNの設定ファイルでグローバル無視パターンを設定することもできます。

3
petr k.

Subversionにディレクトリを追加し、そのディレクトリの内容を無視する

svn propset svn:ignore '\*.*' .

または

svn propset svn:ignore '*' .
3
Al Conrad

作業コピーで svn status コマンドを使用してファイルのステータスを表示します。まだバージョン管理されていない(そして無視されていない)ファイルには疑問符が付きます。

ファイルの無視に関しては、svn:ignoreプロパティを編集する必要があります。svnbookの http://svnbook.red-bean.com/en/1.5/svn.advanced.props.specialにある「バージョン管理外の項目を無視する」の章を参照してください。 ignore.html 。この本はsvn statusの使い方についても詳しく説明しています。

2
  1. jetBrains製品(Pycharm)を使用している
  2. それからトップツールバーの 'commit'ボタンをクリックするか、ショートカット 'ctrl + k'を使用してください screenshot_toolbar
  3. コミットインターフェースで、以下のように不要なファイルを別の変更リストに移動します。 screenshot_commit_change
  4. 次回はデフォルトのチェンジリストのみコミットできます。
0
G. Googol