На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Обновляем файловую систему с помощью diff и patch



Как обычно происходит обновление сайта, блога, CMS или CRM в случае мелких ручных правок? Просто обновляется информация в базе данных (админка, phpMyAdmin) и/или заливается новый исправленный файл по SFTP. Такой процесс прост даже в случае крупных правок – например, полной переработки сайта: в конце заливаем все измененные файлы на боевой сервер, при необходимости перезапускаем и все. Но если в это же время на боевом сервере ведутся какие-то работы? В этом случае заливать файлы и обновлять БД просто так нельзя – мало ли какие там вносили изменения во время работы? Установлены новые расширения, добавлена информация и т.д. В этом случае безболезненно обновить (пропатчить) файлы можно с помощью команды diff и утилиты patch.

Для начала надо получить список изменений. Для этого запускаем Git Bash и вводим такую команду:

git diff хэш_первый_коммит хэш_последний_коммит > lsr.patch
хэши коммитов в данной ситуации – это уникальные их идентификаторы. Например, в gitlab можно узнать их из адресной строки



Также первые коммиты (хэш) можно узнать с помощью команды:

git log –reverse
Теперь, когда мы знаем две точки, между которым необходимо зафиксировать изменения, создаем патч с помощью команды diff и получаем файл lsr.patch. Его можно открыть в текстовом редакторе и посмотреть в какие файлы и какие именно изменения будут вноситься. Структура понятна интуитивно: первая строка адреса меняемых файлов (обычно совпадают), а ниже изменения. Теперь необходимо залить этот файл на сервер (по SFTP например) в его корень, а подключиться к боевому серверу по SSH и выполнить примерно такую команду от root:

patch -p1 < lsr.patch
Если утилиты патч нет на сервере, то установить её несложно – система на сервере сама подскажет вариант. Но почему примерно такую? Потому что, вообще я бы рекомендовал для начала запустить с параметром --dry-run:

patch --dry-run -p1 < lsr.patch
Так у вас будет произведена имитация обновления файлов и покажутся возможные ошибки. Например, такая:

warning: CRLF will be replaced by LF in include/file.php.
The file will have its original line endings in your working directory
Возникает в основном из-за того, что у win-lin-mac немного разные окончания строк (невидимые символы). Но это уже другая тема. Есть и другие интересные ключи(параметры), например, --ignore-whitespace или --fuzz. Последний дает возможность задать максимальное число возможных расхождений символов.

В общем, попробуйте воспользоваться утилитой patch в работе и, возможно, вы её полюбите.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, программирование, полезное, утилиты, программы

Читайте также:




Да здравствует PHP!
Правила именования файлов Windows


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.