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