Чтобы сравнить папку проекта на вашем Mac с копией на сервере, доступном по SSH, используйте rsync в режиме холостого хода (dry-run). Она может вывести список несинхронизированных файлов без их передачи или изменения. Чтобы увидеть текстовые различия внутри отдельного файла, скопируйте обе версии на Mac и воспользуйтесь утилитой diff. В этом руководстве рассматривается сравнение локального каталога проекта с удаленным; здесь не предполагается, что обе копии синхронизированы, и не дается указаний о том, какая версия должна иметь приоритет.
Сначала проверьте соединение и пути
Откройте Терминал на вашем Mac. В документации Apple SSH указан как один из протоколов, которые Терминал может использовать для подключения к удаленным серверам; с помощью консольного клиента ssh вы также можете выполнять команды на удаленной машине. Вам понадобятся имя сервера, учетная запись на нем, доступ к каталогу проекта и настроенная аутентификация по SSH. Эти параметры подключения описаны в руководстве по Терминалу от Apple и в справочном руководстве по ssh от OpenBSD.
Замените приведенные ниже примеры учетной записи, хоста и имен папок на свои собственные. На удаленной машине должна быть установлена утилита rsync, доступная для вашей учетной записи. Команда rsync --version покажет локальную версию; версию на удаленном сервере можно проверить с помощью ssh user@host rsync --version.
ssh user@server.example.com
Если вход завершается ошибкой, устраните неполадки с хостом, аутентификацией, сетью или правами доступа, прежде чем переходить к сравнению файлов. Затем точно определите пути к обоим каталогам проекта. В примерах /Users/you/Projects/site является локальным путем, а /srv/projects/site — удаленным. Оставляйте косую черту на конце каждого пути каталога, чтобы сопоставлять их содержимое в одинаковой относительной структуре. Если пути содержат пробелы, заключайте их в кавычки.
Предварительный просмотр различающихся файлов
Выполните эту команду на вашем Mac:
rsync -rnic --out-format='%i %n' \
user@server.example.com:/srv/projects/site/ \
/Users/you/Projects/site/
Удаленный путь выступает источником (source), а путь на Mac — назначением (destination). Команда использует рекурсивный обход (-r), детализированный вывод изменений (-i), сравнение по контрольным суммам (-c) и режим холостого хода (-n). Согласно документации rsync, холостой запуск не вносит никаких изменений, а детализированный вывод предоставляет лаконичный список планируемых обновлений. При таком направлении указанный в выводе элемент означает, что удаленный источник отличается от локального назначения или отсутствует в нем. В руководстве по rsync описаны режим холостого хода, детализированный вывод изменений и сравнение по контрольным суммам.
В режиме контрольных сумм считываются данные файлов на обеих сторонах для сопоставления содержимого, поэтому он может занимать больше времени и создавать более высокую нагрузку на ввод-вывод диска, чем стандартная быстрая проверка rsync, которая опирается на размер файла и время его изменения. Используйте -nic, когда важно именно содержимое, даже если метки времени или размеры могут не указывать на изменения. Для более быстрого предварительного анализа используйте -rin; этот вариант выводит изменения, обнаруженные быстрой проверкой rsync, но может пропустить различия в содержимом, если размер и время изменения файла совпадают. Предварительный просмотр не отображает измененные строки внутри самих файлов.
Поменяйте пути местами, если копия на Mac должна считаться источником, а удаленная копия — назначением. Направление имеет значение: маркеры детализированного вывода rsync отражают действия, которые программа применила бы к назначению. Не убирайте флаг -n во время анализа результатов. Удаляйте его только в том случае, если вы осознанно решили выполнить передачу данных; rsync — это инструмент копирования, а не двустороннего слияния.
Просмотр содержимого различий в текстовом файле
Чтобы изучить конкретные построчные изменения, сравните два локальных файла с помощью diff -u. Сначала скопируйте одну из версий в отдельное временное расположение любым утвержденным для вас способом передачи данных либо используйте уже имеющуюся локальную копию проекта. Затем выполните:
diff -u \
"/Users/you/Projects/site/config/settings.yml" \
"/Users/you/Desktop/settings-remote.yml"
Унифицированный формат вывода отображает контекст вокруг измененных строк. Строки с префиксом - относятся к первому файлу, а строки с префиксом + — ко второму. Команда diff выполняет сравнение содержимого, поэтому она не переносит и не объединяет правки. Для сравнения всего дерева каталогов локально команда diff -ru local-folder remote-folder рекурсивно сопоставит соответствующие файлы, однако удаленная папка должна быть смонтирована или иным образом доступна как локальный путь. Руководство по GNU Diffutils поясняет особенности рекурсивного сравнения каталогов и унифицированного вывода; параметры команд в macOS могут отличаться, поэтому обратитесь к man diff на вашем Mac, если какая-либо опция не поддерживается. Руководство по GNU Diffutils.
Учитывайте ограничения перед началом действий
Вывод rsync без изменений означает лишь то, что различий не найдено в соответствии с выбранными вами правилами сравнения и путями. Команда не выводит параллельное визуальное сравнение (side-by-side), не разрешает конфликты правок и не гарантирует совпадение всех свойств файловой системы. Опция расчета контрольных сумм в rsync сравнивает содержимое файлов, тогда как учет метаданных (таких как права доступа и метки времени) зависит от переданных флагов. Кроме того, структуры каталогов могут измениться сразу после предварительного просмотра, если кто-то внесет правки в любую из копий.
Если удаленная система не поддерживает доступ по SSH или работу с rsync, описанный сценарий работать не будет. В этом случае используйте способ доступа, разрешенный данной системой, создайте две доступные локальные копии и сравните их с помощью diff или другого подходящего инструмента. Не запускайте команду передачи файлов вместо предварительного просмотра, если только вы намеренно не стремитесь применить механизм обновления файлов от источника к назначению.
Источники
Подключение к серверам в Терминале на Mac — Служба поддержки Apple
ssh(1) — справочные страницы OpenBSD — OpenBSD
Справочная страница rsync(1) — The Samba Project
Сравнение и объединение файлов (Comparing and Merging Files) — GNU Project