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


645

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

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


それぞれの簡単な質問(おそらくgitユーザーからの質問)が多くの複雑すぎる回答をどのように意味するかを見るのは楽しいです。これが発生した場合、それはSubversionの赤ちゃんです。
Valerio Bozz

回答:


738

(この回答は、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の両方でHKLMHKCU
    • Linux / Unix- ~/.subversion/config

2- 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/ignoreThisignoreThis.txt」が.リポジトリのルートに適用されていても、ファイルは無視されません)。

  • したがって、無視リストを再帰的に適用するには、を使用する必要がありますsvn propset svn:ignore <filePattern> . --recursive

    • これにより、すべてのサブディレクトリにプロパティのコピーが作成されます。
    • <filePattern>子ディレクトリで値が異なる場合、子の値は親を完全に上書きするため、「相加」効果はありません。
    • したがって<filePattern>、ルート.でを変更--recursiveする場合は、子ディレクトリと子孫ディレクトリで上書きするように変更する必要があります。
  • コマンドライン構文は直感に反していることに注意してください。

    • 私はあなたがSVNのファイルを無視することを想定して始めましたsvn ignore pathToFileToIgnore.txtが、これは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は、無視されたファイル(つまり、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

たーだ!


6
無視されたファイルを見つけるには:svn status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
Christian Madsen

3
ファイル./FolderA/FolderB/FileToIgnoreを無視する場合は、これをから行います。フォルダ:svn propset svn:ignore "FileToIgnore" FolderA / FolderB /
jnj

8
ssh svn propedit svn:ignore .を実行していて、テキストエディターが構成されていない場合、svn:E205007:環境変数SVN_EDITOR、VISUAL、EDITORのいずれも設定されておらず、「editor-cmd」ランタイム構成オプションが設定されていませんでした。エディタを開く代わりに見つかりました。したがって、-editor-cmd nanoを次のように指定するだけですsvn propedit svn:ignore . --editor-cmd nano
Jonathan

12
「--recursive」引数を使用して、すべてのサブフォルダーで特定のファイル名を持つファイルを無視することもできます。つまり、svn propset svn:ignore "* .jpg"です。--recursive
Templar

2
AWKのシンプルな代替はgrepのである:svn status | grep '^?'
Johnride

91

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

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

2
いいね。マイナーな改善ですsvn status | awk "/^?/ {print \$2}" > ignoring.txt
Dirk Eddelbuettel 2014

4
なぜファイルを削除するのですか?作成/追加/削除をやり直す必要がある場合は、リポジトリに保持してください
tgkprog

このソリューションは、サブディレクトリ内のファイルを無視しないことに注意してください(それらがignoring.txtに表示される場合でも)。
shaneb 2017

既存の無視を保持しますか?そうでない場合、1つのコマンドでそれを行う方法(つまり、--no-ignoresを実行し、Iが前にある行も保持する)?
a1an 2017年

これは、現在の無視を上書きsvn pg svn:ignore . >> ignore.txtします。現在の無視をファイルに追加する最初のコマンドの後に試してください。
ulitosCoder 2017年

55

.gitignoreのようなアプローチ

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

svn propset svn:ignore -F ignorelist.txt .

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

svn propset svn:ignore "first
 second
 third" .

ソース:Karstenのブログ-コマンドラインから複数のファイルにsvn:ignoreを設定


1
後で無視ファイルを変更する場合は、svn:ignoreコマンドを再実行する必要があることに注意してください(stackoverflow.com/a/58380306/189518を参照)
Sensei James

50

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

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

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

このリストはTortoiseSVN /プロパティのコンテキストメニューにあります


26

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

svn propedit svn:ignore .

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


3
この回答は役に立ちました。私の場合、「。」を変更する必要がありました。無視したいファイルのサブディレクトリに、ファイルパターンを指定します。また、初めて、これを実行する必要がありました(私はMacを使用しています):export SVN_EDITOR = "nano"
Elijah Lofgren

22

記事.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に使用できます

https://github.com/github/gitignore


1
私はあなたが言ったようにした...しかし私がsvn statusを実行すると 無視されたファイルは「?」で表示されます
Harshit Gupta 2014

私はsvn statusで確認したことはありませんが、svn add *で確認した後、svn commitを実行しても、ファイルを無視してもコミットされません。
d.danailov 2014年

ファイル「a.txt」がすでにバージョン管理されている場合、「svn propset svn:ignore -F .svnignore a.txt」のようなコマンドによって無視が行われますか?それが正しいか ?
errakeshpd 2014

.svnignoreファイルに "a.txt"を追加した場合、私にはわかりませんが、コマンドは適切です。
d.danailov 2014

10

propeditを使用する場合は、ファイルが無視リストから除外される原因となるため、末尾にスペースがないことを確認してください。

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

svn propset svn:ignore 'file1
file2' .

6
これは、bashなどの一部のシェルでのみ機能します。propsetコマンドを再発行すると、以前のパターンのセットが上書きされることに注意してください。
JAフォーセット2012

それで、file1file2は別々の行になければなりませんか?
IgorGanapolsky

8

別の解決策は:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

または行ごと

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

また、Tortoise SVNを使用している場合、これを行うことができます:

  1. コンテキストメニューで[TortoiseSVN]、[プロパティ]の順に選択します
  2. 表示されたウィンドウで、[新規]、[詳細]の順にクリックします
  3. 「プロパティ名」の反対側に表示されるウィンドウで「svn:ignore」を選択または入力し、「プロパティ値」の反対側に目的のファイル名またはフォルダー名またはファイルマスク(私の場合は「* / target」)を入力し、「適用」をクリックします。プロパティを再帰的に」
  4. OK。OK。
  5. コミット

6
  1. cd〜/ .subversion
  2. 構成を開く
  3. 「global-ignores」のような行を見つける
  4. .soは*グローバル無視= * .oの* .LO * .la * .al .LIBS:セットは次のようにファイルタイプを無視する.so [0-9]。 * .pycファイル* .pyo 88 * .rej 〜# #。#*。*。swp .DS_Store node_modules output

ありがとう、あなたの答えはconfigファイルについて言及している唯一のものです。
Henrique de Sousa

この回答は、@ HenriquedeSousa stackoverflow.com/a/86052/7724についても言及しており、ファイルを無視するローカルクライアントのみの方法であることも説明しています。
bzlm 2017

5

bkbillyの答えのより読みやすいバージョン

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. ファイルを削除します

私はbkbillyの答えが好きですが、このバージョンは各行を改行して読みやすくし、最初の行は常に一時ファイルを作成し、この同じ一時ファイルは常に無視リストに入るので、テストでは何もしなかった&&を削除します。
LivingDust 2016

この場合、編集命題がより適切です。努力を感謝します!
ジム

編集を提案するのに十分な評判がありませんでした。しかし、私は良いプロトコルを台無しにしたくありません。新しい回答などを投稿するよりも提案して編集する方がよい場合のガイドラインに関する簡単なREADMEはありますか?
LivingDust 16

1
あなたの答えが一年半前に投稿されたものとまったく同じであれば、それはかなり簡単です。あなたそれが何をするか」の説明さえコピーしました。
ジム

3

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


1
特定のリポジトリに無視パターンを設定できますか?
デビッドドリア

3

svn status どのファイルがSVNにないか、また何が変更されたかを通知します。

ignoreプロパティのSVNプロパティを確認してください。

すべてのSVNについては、レッドブックを読む必要があります。



2

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

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


2

ignoreTortoiseSVNでSVN を管理するのは簡単です。TortoiseSVNを開いてファイルメニューを右クリックし、[追加]を選択してリストを無視します。

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

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

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

このメソッドを使用してComparetrapの SVNでソースコードを正常に管理しています


2

私のために働いたもの:

Subversionでファイルを無視するにはどうすればよいですか?
1.ファイルエクスプローラーで、SVNプロジェクトのフォルダー名を右クリックします
2. [ SVNコミット... ]をクリックします3. [
コミット]ウィンドウが表示されます
4.無視するフォルダー/ファイルを右クリックします
5.
[ リストを無視して追加]をクリックします6.フォルダ/ファイルを
選択します7.「プロパティの変更」をSVNにコミットします

また、バージョン管理されていないファイルを見つけるにはどうすればよいですか?
上記のステップ3の後、「バージョン管理外のファイルを表示」をクリックします


0
  1. JetBrains製品(Pycharmなど)を使用して開く
  2. 次に、上部のツールバーの「コミット」ボタンをクリックするか、ショートカット「Ctrl + K」を使用します screenshot_toolbar
  3. コミットインターフェイスで、不要なファイルを次のように別の変更リストに移動します。 screenshot_commit_change
  4. 次にコミットできるのは、デフォルトの変更リストのみです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.