Унисон не игнорирует пути

Унисон не игнорирует пути

Я пытаюсь игнорировать .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. В любом случае, для тех, кто синхронизирует весь корневой каталог, вы можете добавить что-то вроде .*,*к шаблонам подстановки, но эти шаблоны будут соответствоватьлюбойфайл с именем типа foo.gittoo. Таким образом, вы можете либо решить не иметь никаких каталогов/файлов с именем .gitи т. д. на верхнем уровне вашего rootкаталога, или, если вас устраивают совпадения вроде foo.gittoo, то вы можете использовать строки:

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

Связанный контент