.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
同期するディレクトリ内にある場合、先頭文字はありません。この問題は、上記のプロファイルでは回避されています。なぜなら、行 で/
ディレクトリのみが同期されているからです。とにかく、ルートディレクトリ全体を同期する人にとっては、グロブパターンに次のようなものを追加できますが、これらのパターンは一致します。testdir
path = hack/testdir
.*,*
どれでもtooのような名前のファイル。つまり、ディレクトリの最上位に などのfoo.git
名前のディレクトリ/ファイルがないことを確認するか、too のようなものと一致しても問題ない場合は、次の行を使用できます。.git
root
foo.git
ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module