4

Я пытаюсь игнорировать каталоги .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 ответ1

4

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .