34

svn:ignore プロパティを使用して、無視したくないパターンに基づいて無視したいものを指定する方法はありますか? つまり、 .xyz で終わるファイル以外はすべて無視したいということです。どうすればそれを行うことができますか(可能であれば)?

私が検討したオプションの 1 つは、バージョン管理したいすべてをコミットしてから、ディレクトリの svn:ignore プロパティを '*' に設定することです。つまり、他のファイルはなく、既にコミットしたものはバージョン管理されます。これは私が思いつくことができる最高のものですが、バージョンに別のファイルを追加する必要がある場合、複数のコミットを行う必要があるという点で汚いと感じます... 1つはsvn:ignoreプロパティを削除するため、もう1つは新しいファイルを追加/コミットし、次に svn:ignore を '*' に戻します。

あなたの考え?

4

6 に答える 6

19

Subversion の svn:ignore プロパティのネガティブ パターンの使用をご覧ください。もちろん、「!」を使用できます。文字グループでその意味を否定します。したがって、.java で終わるファイル以外をすべて無視する場合は、次のパターンを svn:ignore に設定します。

*[!j][!a][!v][!a]
*.java?*
于 2010-10-20T13:37:39.463 に答える
13

いいえ、あなたが説明したような排他的なマッチングはありません。この記事では、パターン マッチングの可能性を一覧表示します。次の場合に限定されます。

  • ?- 任意の 1 文字に一致
  • *- 空の文字列を含む任意の文字列に一致
  • [- で終わる文字クラス定義を開始し、文字]のサブセットの照合に使用

同様の質問がすでにここで尋ねられました。

于 2009-07-16T14:16:40.900 に答える
9

それが私が知っている唯一の解決策です。ただし、無視された場合でも、ファイルを明示的に追加できます。

ただし、すべてのサブディレクトリにその設定を追加する必要があります。

# Create a repository with property ignore *

[wlynch@orange ~] cd /tmp
[wlynch@orange /tmp] svnadmin create foo
[wlynch@orange /tmp] svn co file:///tmp/foo co
Checked out revision 0.
[wlynch@orange /tmp] cd co
[wlynch@orange co] svn propset svn:ignore \* .
property 'svn:ignore' set on '.'

# Create 3 files

[wlynch@orange co] touch a
[wlynch@orange co] touch b
[wlynch@orange co] touch c

# We can add all 3 of these files in one transaction

[wlynch@orange co] svn status
M     .
[wlynch@orange co] svn add a
A         a
[wlynch@orange co] svn add b
A         b
[wlynch@orange co] svn status
M     .
A      a
A      b
[wlynch@orange co] svn add c
A         c
[wlynch@orange co] svn ci
Sending        .
Adding         a
Adding         b
Adding         c
Transmitting file data ...
Committed revision 1.
于 2009-07-16T14:06:38.107 に答える
5

これは、apkファイルを除くすべてに一致するようにプロパティbinのフォルダーに設定したものです。svn:ignore

*[!a][!p][!k]
*a[!p][!k]
*ap[!k]

完全な正規表現サポートがある場合は、ネガティブルックビハインドを使用できますが、それがとにかく実装されることはめったになく(JavaScriptではないなど)、非効率的です。

于 2012-12-16T14:19:37.513 に答える
4

以下は私にとってはうまくいき、他の提案のいくつかの癖を取り除きます。

*.?
*.??
*.???
*.[!j]???
*.?[!a]??
*.??[!v]?
*.???[!a]
*.?????*

行ごとの説明は次のとおりです。

  • 1 文字の拡張子を持つものはすべて無視する
  • 2 文字の拡張子を持つものはすべて無視する
  • 3 文字の拡張子を持つものはすべて無視する
  • 拡張子の最初の文字が j ではない 4 文字の拡張子を持つものはすべて無視します
  • 拡張子の 2 番目の文字が
  • 拡張子の 3 番目の文字が v でない 4 文字の拡張子を持つものはすべて無視します
  • 拡張子の 4 番目の文字が
  • 5 文字以上の拡張子を持つものはすべて無視する

制限:

  • これにより、.java で終わるディレクトリもブロックされます。
  • 残念ながら、拡張子のないファイルはディレクトリもブロックするため、無視できませんでした。
于 2014-01-31T10:17:41.370 に答える
0

何か見落としがあるかどうかはわかりませんが、好きなパターンを使用できます。

svn propset svn:ignore "*~" .

次の方法で確認できます。

svn propget svn:ignore .

もう 1 つの方法は、コミット時に複雑な解析を実行できるエイリアス / スクリプトを使用することです。

私が見つけた最善の解決策は、ソース ファイルのバージョン管理されたツリーをビルド ツリーから完全に分離することです。この方法では、ディレクトリのバージョン管理されたツリーに何かを生成しません。svn:ignore次に、たとえばテキストエディターによって生成された単純なアーティファクトを無視するためにのみ使用できます。

編集:

最初の解決策の間違いで申し訳ありません。投稿を読み間違えました。他の2つの方法は、あなたが望むものではないにしても、関連しているようです...

于 2009-07-16T14:04:26.923 に答える