Используйте rsync для зеркалирования источника для развертывания веб-сайта, но не для удаления выбранных файлов в месте назначения

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

По сути, я пишу инструмент развертывания веб-сайта, и он использует rsync для перемещения файлов из исходного репозитория Git для развертывания репозитория Git; пункт назначения. Принятие решения о развертывании репозитория фактически развертывает код на веб-сервере, поэтому я задерживаю с помощью rsync между двумя разными каталогами.

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

Из того, что я прочитал в man , здесь и в других местах, я понимаю, что если я добавлю имена файлов в репозитории deploy / destination, которые я хочу сохранить в файле --exclude-from

Вот что я делаю, в основном:

 rsync --archive --verbose \ --exclude ".git" --exclude ".git*" \ --exclude-from="/tmp/excludes.txt" --delete-after \ /dir/to/source/repo/ \ /dir/to/deploy/repo 

И для примера скажем, что это содержимое /tmp/excludes.txt :

 /foo/bar/baz.php 

Теперь, когда я попробовал это, используя тривиальный пример локально, он всегда, кажется, работает как ожидалось. Но когда я использую его с CircleCI в реальном сценарии развертывания, rsync всегда удаляет /foo/bar/baz.php после выполнения вышеуказанной команды.

Вы видите, что я делаю не так? Заранее спасибо.

ОБНОВЛЕНИЕ – ВЫШЕ РАБОТАЕТ

Оказывается, логика в моем скрипте, работающем в CircleCI, была ошибочной, и я просто не мог ее увидеть. Я выполнял несколько команд rsync с разными корнями (в основном подкаталогами моего основного корня) из-за разных необходимых правил, и одним списком исключаемых файлов с путями к файлам, которые основывались на основном корне. Тьфу.

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

One Solution collect form web for “Используйте rsync для зеркалирования источника для развертывания веб-сайта, но не для удаления выбранных файлов в месте назначения”

Просто чтобы закрыть цикл, если кто-то, читающий это, хочет знать, как использовать rsync для зеркального отображения каталога назначения с исходным каталогом, за исключением определенных именованных файлов, вот как вы это сделаете:

 rsync --archive --verbose \ --exclude-from="/tmp/excludes.txt" --delete-after \ /dir/to/source/repo/ \ /dir/to/deploy/repo 

Это содержимое /tmp/excludes.txt где указанный файл имеет полный /dir/to/deploy/repo/foo/bar/baz.php к /dir/to/deploy/repo/foo/bar/baz.php :

 /foo/bar/baz.php 
Linux и Unix - лучшая ОС в мире.