gibo で mercurial 用の .hgignore を作成しても問題ないでしょうか?

88 views
Skip to first unread message

ohira

unread,
Nov 18, 2016, 5:20:28 AM11/18/16
to mercurial-ja
いつもお世話になっております。

おおひらです。

.hgignore の作成時に gibo を使っても問題ありませんでしょうか?

gibo の利用例
gibo Windows Linux macOS Archives CVS SVN Emacs Vim Vagrant Eclipse JetBrains > .hgignore


特に問題なさそうに思えるのですが、
.gitignore と .hgignore の仕様の違いで注意しなければならない点とかあるのでしょうか。

.hgignoreのマニュアル


上のページではglobとreのことがあまり説明されていませんが
globとかreについては下のページ見ればよいのでしょうか。

globの説明

reの説明

 .gitignoreの仕様詳解

!で打ち消すやり方は.hgignoreでは使えないのでしょうか?

gibo (結構便利です)







Katsunori FUJIWARA

unread,
Nov 24, 2016, 4:44:37 AM11/24/16
to mercurial-ja
藤原です。

2016年11月18日 19:20 ohira <shin....@gmail.com>:

> .hgignore の作成時に gibo を使っても問題ありませんでしょうか?
>
> gibo の利用例
> gibo Windows Linux macOS Archives CVS SVN Emacs Vim Vagrant Eclipse
> JetBrains > .hgignore
>
>
> 特に問題なさそうに思えるのですが、.gitignore と .hgignore の仕様
> の違いで注意しなければならない点とかあるのでしょうか。
>
> .hgignoreのマニュアル
> http://mercurial-users.jp/manual/hgignore.5.html
>
> https://www.mercurial-scm.org/wiki/.hgignore

最も留意すべき点は、hgignore のデフォルト文法が、正規表現 (re or
regexp) 形式である点でしょう。

.gitignore が受け付けるパターンは、.hgignore の glob 形式と同等の
"shell glob" 形式のみです。

そのため、.hgignore への gibo 出力からの書き出しに先立って、パター
ンの文法形式を指定する "syntax: glob" を書き出す必要があります。

$ (echo "syntax: glob"; gibo ARG_FOR_GIBO ....) > .hgignore

> .gitignoreの仕様詳解
> http://qiita.com/anqooqie/items/110957797b3d5280c44f
>
> !で打ち消すやり方は.hgignoreでは使えないのでしょうか?
> https://github.com/git/git/commit/8c722360d1277259d4baec951e1488086f775214

"!" による「無視指定の無効化」に直接相当する機能はありません。です
から、gibo を使う場合、! が含まれているテンプレートの指定は、避け
たほうが良いでしょう。

手動で対応する場合、glob ではなく、正規表現(re)形式であれば、一応
実現できなくはないです。以下のエントリが参考になれば幸いです。

http://d.hatena.ne.jp/flying-foozy/20131027/1382864409


以下、公式仕様をベースに、上記以外で注意すべき差異のある部分につい
て言及します。"PATTERN FORMAT" 節での対応する項目の冒頭を併記して
おきます。

https://git-scm.com/docs/gitignore

なお、以下の言及は全て、.hgignore において "glob" 形式でパターンを
指定することを想定したものです。


- 末尾 "/" の有無による、合致の差異は発生しない
(If the pattern ends with a slash, ...)

例えば "README/" は、 README ディレクトリ配下のファイルにも、
README ファイルにも合致します。

- hgignore でのパターン指定は、パスに対する任意合致の判定
(If the pattern does not contain a slash /, ...
Otherwise, ...)

パターン指定における「合致判定開始位置」について解説した、以下の
エントリ も参照してみてください。

http://d.hatena.ne.jp/flying-foozy/20140107/1389087728


- 冒頭に "/" を置いた場合、基本的にそのパターンは役に立たない
(A leading slash matches ...)

例えば "/README" は、ルート直下の README ファイルにも、任意の
README ディレクトリ配下のファイルにも合致「しません」。


うーん、改めて差異を見てみると、「互換性がない」と思っていた方が良
い様な気が (^ ^ ;;;)

まぁ、gibo の出力、というか引用元の .gitignore template 集からのチョ
イス次第ではあるんですが……

https://github.com/github/gitignore

> 上のページではglobとreのことがあまり説明されていませんが
> globとかreについては下のページ見ればよいのでしょうか。
>
> globの説明
> http://docs.python.jp/2/library/glob.html#module-glob
>
> reの説明
> http://docs.python.jp/2/library/re.html#module-re

そうですね。そちらを参照するのがよろしいかと。

glob 形式に関しては、"hg help patterns" でも、一応簡単な解説があり
ますが、文法的な網羅性はあまりありませんからねぇ……


> gibo (結構便利です)
> https://gist.github.com/nihonzaru/42582bf333d5554b182a


--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Katsunori FUJIWARA

unread,
Nov 24, 2016, 4:52:12 AM11/24/16
to mercurial-ja
藤原です。

補足。

一般ユーザ向けコマンドではないですが、debugignore コマンドを使うこ
とで:

- "hg debugignore PATH/TO/FILE"

現行の .hgignore が指定のファイルを無視するか否かを判定

- "hg debugignore"

現行の .hgignore を元に構築した、無視判定に使用する正規表現を表示

上記のような情報を得ることができるので、手元の .hgignore と実際の
ファイルの対応付けの妥当性等を判定したい場合は、試してみてください。



2016年11月24日 18:44 Katsunori FUJIWARA <flying...@gmail.com>:
--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)
Reply all
Reply to author
Forward
0 new messages