Unison はパスを無視しません

Unison はパスを無視しません

.git同期から、.bundleおよびディレクトリを無視しようとしていますnode_module。 動作させるためにさまざまな組み合わせを試しましたが、同期するたびに、それらのディレクトリがすべてリモート マシンに同期されていることがわかります。

私が間違っているところを誰か見つけられますか?

~/.unison/default.prf

# Roots of the synchronization
root = /Users/bob/synced
root = ssh://bob@remotebox/synced

# Paths to synchronize
path = hack/testdir

# Some regexps specifying names and paths to ignore
ignore = Name *.log
ignore = Name .DStore
ignore = Name .DS_Store
ignore = Name *.output
ignore = Name *:*
ignore = Path {*/.git/*}
ignore = Path {*/.bundle/*}
ignore = Path {*/.vagrant/*}
ignore = Path {*/.git}
ignore = Path {*/.bundle}
ignore = Path {*/node_modules}

# Window height
height = 37

# propogate file modification times
times = true

# Log actions to the terminal
log = true

auto = true
batch = true

役に立つかどうかはわかりませんが、これは OSX から Windows 10 への同期です。

答え1

こちらのリンクからパスの指定とパスの無視Unisonマニュアルのセクションは、Unisonに関する質問に答えるときに私が最も好きなセクションです。ignore Name = name最後のコンポーネントが に一致するパスは無視されることに注意してくださいname。また、

[文字] は、を含まない(名前の先頭に使用されている場合はで始まらない)*任意の文字シーケンスに一致します。/.

.gitしたがって、特定のファイル タイプを無視するのと同じように、パスを無視できます。 、、.bundleおよびはnode_moduleすべて先頭に文字があります/が、で始まる隠しディレクトリの下にある可能性があるという事実を考慮する.と、次の行が必要になります。

ignore = Name {*/,.*/}.git
ignore = Name {*/,.*/}.bundle
ignore = Name {*/,.*/}node_module

ディレクトリ全体を同期するだけの人にとってはroot、残念ながらこれではカバーされない稀なケースがあります。これらのファイルが最上位レベル、つまりroot同期するディレクトリ内にある場合、先頭文字はありません。この問題は、上記のプロファイルでは回避されています。なぜなら、行 で/ディレクトリのみが同期されているからです。とにかく、ルートディレクトリ全体を同期する人にとっては、グロブパターンに次のようなものを追加できますが、これらのパターンは一致します。testdirpath = hack/testdir.*,*どれでもtooのような名前のファイル。つまり、ディレクトリの最上位に などのfoo.git名前のディレクトリ/ファイルがないことを確認するか、too のようなものと一致しても問題ない場合は、次の行を使用できます。.gitrootfoo.git

ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module

関連情報