@mletov

Как затягивать изменения с сервера через Git?

Есть сайт на Битриксе.

Создал на сервере репозиторий, настроил его обновление вот по этому мануалу

В целом все хорошо. Сommit и push работают как надо.

Но есть проблема с pull. В Битриксе когда пользователь через админку что-то меняет, то не всегда изменения пишутся в базу, иногда и в php файлы. И бывает, что просто какие-то файлы через интерфейс закачивают. Хотелось бы их актуализировать на локальной машине через pull -> merge.

Но если нажать pull или fetch all, то локальная версия изменений на сервере не видит.

Например, в github если что-то поменять на сервере, то при pull эти изменения можно вытянуть.
Хотелось бы сделать аналогично.

Как это настроить?
В какую сторону копать, что почитать? Хуки?
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Этот мануал в вашем случае не подходит. Там синхронизация односторонняя. Вы отправляете не на сайт, а в репозиторий на сервере. Затем хук извлекает содержимое ветки master в каталог с файлами сайта, затирая всё что там ранее мог изменить пользователь через админку.

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

если нажать pull или fetch all, то локальная версия изменений на сервере не видит.

А разве должен видеть? Fetch/Pull скачивает не файлы из рабочего каталога, а коммиты из репозитория. Это вообще разные сущности. Чтобы в репо попали изменения, их нужно коммитить, только так и не иначе.

Предлагаю не создавать bare-репозиторий без рабочего каталога, а инициализировать обычный репо прямо в каталоге сайта. Обновления не проталкивать через push, а забирать через pull, потому что гит не сможет отправить push в текущую ветку. Чтобы забрать изменения файлов с сервера, их нужно предварительно коммитить разумеется, так как pull скачивает не файлы, а коммиты. Pull лучше делать на чистом от изменений рабочем каталоге, поэтому можно запускать простой скрипт
git fetch # скачать обновления заранее, чтобы не ждать во время обновления файлов
git stash # временно спрятать локальные правки
git pull # применить обновления к сайту
git stash pop # вернуть локальные правки обратно
Это немного помогает избежать конфликтов между вашими локальными изменениями и изменениями из внешнего репозитория. Но лучше предварительно закоммитить изменения на сервере и перенести их на рабочий компьютер.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы