Я пытаюсь игнорировать .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.git
too. Таким образом, вы можете либо решить не иметь никаких каталогов/файлов с именем .git
и т. д. на верхнем уровне вашего root
каталога, или, если вас устраивают совпадения вроде foo.git
too, то вы можете использовать строки:
ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module