2009-10-02 13 views
42

特定のファイルを含めるために.hgdontignoreファイル:-)が必要です。基本的には、特定のディレクトリに.jarファイルだけを入れたいだけです。これどうやってするの?私は正規表現の構文に熟練しているわけではありません。あるいは、globシンタックスでそれを行うことはできますか? (私は可読性のためにそれを好む)hgignore:特定のファイル以外のすべてのファイルを無視するヘルプ

例の場所と同じように、私はfoo/bar/の下にあるfoo/bar/*.jar以外のすべてのファイルを除外したいとしましょう。

答えて

36

はこれを行うには、この正規表現を使用する必要があります

foo/bar/.+?\.(?!jar).+ 

説明

あなたは何を無視するように指示されているが、ので、この表現は、物事を探しているあなたドン'tが必要です。あなたは、名前(相対ディレクトリを含む)の任意のファイルを探し

  1. 含み(FOO /バー/)
  2. あなたは、その後の期間の前に任意の文字を探してください(。+?\。==試合一つ以上
  3. これは、 "jar"エンディング(?!jar)がないことを確認します(これはネガティブルックアヘッドと呼ばれます)
  4. 最後に、それをつかむ(+)

正規表現イオンは混乱しやすいので、私はあなたがそれらを構築するのを助けるためにRegex Buddyのようなツールを得ることを強くお勧めします。それは正規表現を本当に役立つ簡単な英語に分解します。

EDIT

ねえJason S、あなたはそれがそれらのファイルを欠場し、私をつかまえました。

この修正正規表現は、あなたがリストされているすべての例のために動作します:

  • のfoo /バー/ bazに
  • FOOを

    • のfoo /バー/ baz.txt:

      foo/bar/(?!.*\.jar$).+ 
      

      それが見つかりました/ bar/jar

    • foo/bar/baz.jar.txt
    • foo/bar/ba z.jar。
    • foo/bar/baz。
    • foo/bar/baz.txt。

    しかし

    • のfoo /バー/バズを見つけることができません。「の.jar」とし、これ以上の文字が続くゼロ以上の文字があるならば、一致していない、「/ fooの/バー」これは、内のファイルを探し言う

    新しい説明

    をjarファイル($は行の終わりを意味します)、そうでない場合は、次の文字と一致します。

  • +0

    whee!ありがとう、今私は行くし、それを試してみましょう。 –

    +1

    うーん、いい考えですが、拡張子がまったくないファイルとは一致しないため、これは正しく機能しません。しかし、私はそれが私が必要とするものに変形できると思う。 'foo/bar /'部分は簡単なので、その時点でそれを忘れてしまいましょう。もしそれが "baz.txt"、 "baz"、 "jar"、 "baz.jar.txt"、 "baz.jar。"、 "baz。"、 "baz.txt"のファイルと一致するように修正できれば、 "しかし、 "baz.jar"ではなく、私は受け入れます。 :-) –

    +0

    こんにちはジェイソン、私はあなたが意味するものを参照してください。私はちょうど働いている正規表現で私の答えを更新しました。私はあなたが列挙したすべての文字列に対してそれをテストしました。 –

    41

    マイケルからの答えは罰金1ですが、別のオプションは、単に除外することです:

    foo/bar/** 
    

    をし、手動で.jarファイルを追加します。無視ルールで除外されたファイルはいつでも追加でき、無視されたファイルを上書きします。将来作成するジャーを追加するだけで十分です。

    +0

    どのように手動で追加しますか?無視ファイルが使用されるので、 "hg add"でそれらを追加すると失敗します。 "hg add -I"を付けてそれらを追加すると、ignoreファイルが適用されますが失敗します。では、ignoreファイルをどのように上書きして追加することができますか? – Mecki

    +3

    Meckiは、 'hg add'でそれらを追加しても問題ありません。あなたの追加行にワイルドカードを使用しない限り、無視されます。したがって、あなたの.hgignoreにfoo/bar/**を入れてから、 'hoo add foo/bar/path/specific.file'を実行してください。追加するトンの例外がある場合は、 'hg status -u -n foo/bar/lots - *。jar'を 'xargs hg add'にパイプして明示的に上書きすることができます。 –

    +1

    誰かがfoo/bar/path/specific.fileを変更すると、それでも無視されますか? – holms

    関連する問題