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