0

ディレクトリ構造を持つ

foo
 -1.txt
 -1.notxt
 -bar
  -2.txt
  -3.notxt
  -sub
   -1.txt
   -2.txt
another-folders-and-files

フォルダーfooとそのサブフォルダー内のすべての非「.txt」ファイルを除外したい。最も似ているのは次のパターンです。

^foo/(?!.*\.txt$)

ただし、 fooから1.notxtファイルだけでなく、すべてのサブフォルダーも除外します。barが私の除外パターンに一致するためだと思いますが、 barを無視しないように hg に言う方法がわかりません。

何か案は?

4

1 に答える 1

0

残念ながら、mercurial の無視パターンはファイルとディレクトリを区別しません。したがって、で終わらないすべての名前を無視すると.txt、ディレクトリも無視されます。ただし、通常、ディレクトリ名にはサフィックスがないため、次のように、以外のサフィックスを持つすべての名前を無視することができます。.txt

^foo/.*[^/]\.[^/]*$(?<!txt)

壊す:

^foo/.*foo/ 内の任意のパス。に続く

[^/]\.(少なくとも) 1 つの非スラッシュ文字が先行するピリオド。に続く

[^/]*$、パスの最終接尾辞。最後に:

(?<!txt)txt行末直前がないことを確認してください。

これにより、ピリオドで始まる名前 ( .hgignore) とピリオドをまったく含まない名前( ) が通過しますREADME。サフィックスのないファイルがある場合は、それらを除外する別の方法を見つける必要がありますが、これでほとんどの方法が得られるはずです。途中にドットがあるディレクトリ名がある場合、これによりそれらが抑制され、それらを除外するためにさらに努力する必要があります-またはアプローチを変更します.

(ちなみに、無視された接尾辞の長いリストを用意し、必要に応じて追加する方がおそらく安全です。すぐにリストが安定し、そうすべきではないものを無視する危険がなくなります。)

于 2012-11-03T21:17:51.487 に答える