3

私はこれがうまくいくはずだと言うREチェッカーを持っています。私は何が間違っているのですか?!?

私が無視しようとしていることの例:

apps/cms/templates/cms/test_bup_DEPRECATED/widgets/page_link.html

そして私の.hgignoreファイル:

syntax: regexp
^static
.*_DEPRECATED.*

私はいろいろなことを試しましたが、成功しませんでした:(

別の失敗した試み:

syntax: glob
_DEPRECATED/*

更新:.hgignoreファイルを次のように編集しました:

syntax: glob
**_DEPRECATED/**

しかし、hg stはまだこれを行っています:

$ hg st | grep DEPR
A apps/cms/templates/cms/test_DEPRECATED/base.html

これについても同じ結果です:

syntax: glob
_DEPRECATED
4

3 に答える 3

8

まず、.hgignoreMercurial によって既に追跡されているファイルを無視しません。あなたの例は、ファイルがすでに追跡されていることを示しています。

$ hg st | grep DEPR
A apps/cms/templates/cms/test_DEPRECATED/base.html

ファイルは既に追加されていますが、コミットされていません。hg forgetファイルを無視するために使用すると、無視パターンが有効になります。

.hgignoreパターンはパスのどの部分にも一致するため、必要なのは次のとおりです。

syntax: regexp
_DEPRECATED/

ディレクトリの末尾のスラッシュが必要な場合があることに注意してください。または、末尾が で終わるファイルにも一致します_DEPRECATED。それ以外の場合はドロップします。

無視パターンを解決するには、TortoiseHg の無視 GUI ( thg ignore) が非常に役立ちます。追跡も無視もされていないすべてのファイルが表示され、正しいファイルが無視されるまでパターンを入力できます。

于 2012-07-03T01:56:48.320 に答える
1

正解:

syntax: glob
**_DEPRECATED/**

例:

$ cat .hgignore 
syntax: glob
**_DEPRECATED/**
$ find . | fgrep -v /.hg/
.
./.hgignore
./apps
./apps/cms
./apps/cms/templates
./apps/cms/templates/cms
./apps/cms/templates/cms/file
./apps/cms/templates/cms/test_bup_DEPRECATED
./apps/cms/templates/cms/test_bup_DEPRECATED/widgets
./apps/cms/templates/cms/test_bup_DEPRECATED/widgets/page_link.html
$ hg st
? apps/cms/templates/cms/file
于 2012-07-03T01:20:03.000 に答える
0

正規表現にある * 文字だと思います。* は 0 以上を意味するため、正規表現は文字列の位置 0 で一致し、すべてのファイルを無視し、hgignore が間違いとして解釈し、式を無効にすると思います。

これは文字列の 31 文字目に一致するため、"_DEPRECATED" (引用符なし) のみを使用します。_DEPRECATED という文字列を含むファイルを無視しようとしているように見えるため、このサブセットを選択しました。これがあなたが求めているものと一致しない場合は、お知らせください。使用できる別の正規表現を考えてみます。

また、「静的」という文字で始まるファイルを無視しようとしていますか。これは、他の行が行っているように見えるためです。

また、正規表現よりも簡単な glob 構文を使用できます。この構文を使用すると、ディレクトリ全体を簡単に無視できます。プロジェクトをどのようにレイアウトしたかはわかりませんが、ディレクトリ全体を無視することで目的が達成される場合は、これが簡単な方法です。

詳細なドキュメントはこちら: http://www.selenic.com/mercurial/hgignore.5.html

于 2012-07-03T01:20:00.567 に答える