Гибкая команда слияния для унисон, чтобы выбрать новый или более старый файл? - PullRequest
2 голосов
/ 15 марта 2012

Я использовал unison в качестве моего синхронизатора файлов, и жизнь была великолепна.

По сути, я мог бы в любое время изменить любые файлы на любой стороне, не беспокоясь о том, кто главный и подчиненный и т. Д. Это двунаправлено.

Однако, когда четыре корня переходят друг на друга, когда первичный партнер каждого не может быть достигнут, я начинаю раздвигать границы этого инструмента. Возникают конфликты, которые прекращают автоматическую синхронизацию для задействованных файлов. Аспекты моей бизнес-логики распределены по разным хостам, которые иногда изменяют одни и те же файлы.

В игру вступает опция слияние в файле конфигурации. Он позволяет указывать разные команды слияния для разных типов файлов.

Например, только для файлов журналов. Мне нравится интерполировать их строки с помощью:

merge = Name *.log -> diff3 -m CURRENT1 CURRENTARCH CURRENT2  > NEW   || echo "differences detected"

Вопрос: только для файлов * .last какая команда слияния всегда будет отдавать предпочтение более старой копии?

Для * .rb * .sh и других исходных файлов я не ищу слияния, но всегда выбираю более новую версию в случае конфликтов. Я могу сделать это по умолчанию с помощью опции prefer = newer global .

Для файлов * .png я обычно предпочитаю сохранять меньший (оптимизированный) размер.

1 Ответ

1 голос
/ 02 июля 2013

Что касается файлов .rb и .sh, вы можете использовать preferpartial = Name *.rb -> newer и то же самое для файлов .ssh.Для файлов .last можно использовать older.

Что касается файлов .png, вы можете написать собственную команду слияния, которая проверяет размер обоих файлов.Затем я бы установил merge = Name *.png -> mycmp CURRENT1 CURRENT2 NEW, и команда mycmp получает три пути к файлу, сравнивает размер первых двух и копирует его в третий путь.

...