web-dev-qa-db-ja.com

パスを無視しないユニゾン

同期から.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からWindows10に同期しています。

5
Marklar

Unisonに関する質問に答えるときに私のお気に入りのセクションであるため、Unisonマニュアルの パス仕様とパスの無視 セクションへのリンクは次のとおりです。 ignore Name = nameは、最後のコンポーネントがnameと一致するパスを無視することに注意してください。また

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

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

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

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

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