Использование Unison для синхронизации только папок с именем `src`

314
Sacha T Red

У меня есть ноутбук, который подключен к облачной рабочей станции. Вся моя компиляция происходит на облачной рабочей станции, но я изменяю файлы на своем ноутбуке. Я хочу синхронизировать файлы между ними, но я хочу, чтобы синхронизировались только исходные файлы, а не сборка, конфигурация и т. Д. Я хочу сделать так, чтобы, если папка была названа src, она и ее содержимое синхронизировались рекурсивно.

Например, ~/workspace/src/file1.cppи ~/workspace/src/myfolder/file2.cppсинхронизироваться, но ~/workspace/build/file3.cppне делает. Я продолжаю создавать и удалять проекты и не хочу заново настраивать пути к файлам для синхронизации каждый раз, когда создаю новый проект с новым srcкаталогом.

Сейчас я использую инструмент синхронизации файлов Unison для Mac, и я не знаю, как это сделать. Может кто-нибудь показать мне?

2

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

0
Mike Pierce

К сожалению, похоже, что Unison (один) не может легко это сделать. Из использования ignorenot xxxв руководстве Unison :

В частности, вставка ignore = Path *вашего профиля и последующее использование ignorenotдля выбора определенных путей для синхронизации не будут работать. Вместо этого вы должны использовать предпочтения пути, чтобы выбрать определенные пути для синхронизации.

Поскольку это было именно то, что я имел в виду в качестве решения, это означает, что нет хорошего решения. Вот несколько полезных идей:

  1. Вручную добавьте новый путь для каждого проекта : это как раз то, что предлагает приведенная выше цитата. Для каждого нового запускаемого проекта и каждого нового srcкаталога, который вы хотите синхронизировать, добавьте строку

    Path = path/to/src 

    в свой профиль Unison.

  2. Не обращайте внимания на файлы сборки и конфигурации . Может быть, все ваши файлы сборки и конфигурации имеют только несколько различных шаблонов, с которыми вы можете сравнивать? Вы можете сказать Unison игнорировать эти шаблоны, в частности, добавив что-то в свой профиль Unison, например:

    ignore = Name *.o #ignore object files ignore = Name build #ignore paths that end with "build" ignore = Name {.*,*}.sw[ponx] #ignore pesky vim swap files ignore = ... 
  3. Напишите скрипт, который вам поможет : вы, конечно, можете написать скрипт, который ищет все названные каталоги srcи вызывает Unison для них по отдельности. Но это кажется глупым. Вы могли бы написать скрипт, который помогает с пунктом (1) выше. Напишите скрипт, который найдет все названные пути srcи для каждого такого пути добавьте строку

    Path = /path/to/src 

    в какой-то файл AllThePaths, а затем просто иметь строку

    include AllThePaths 

    в вашем профиле Unison.

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