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

341
Marklar

Я стараюсь не обращать внимания .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, если это помогает.

2

1 ответ на вопрос

2
Mike Pierce

Вот ссылка на раздел « Характеристики пути и игнорирование пути » в руководстве по 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 
Большое спасибо, что решил все мои проблемы. Все мои проблемы с унисонами хотя бы;) Marklar 5 лет назад 0
@Marklar Не за что. Надеюсь, вы найдете сайт StackExchange, который поможет вам решить и другие ваши проблемы. : D Mike Pierce 5 лет назад 1

Похожие вопросы