Як зробити файли оновлення "git push" на веб-хості?


13

У мене є кілька сайтів, які розміщені на одній службі веб-хостингу під спільним хостингом. Мій веб-хост підтримує Git, і у мене є доступ до SSH, а також у мене є налаштування Git і на моєму ноутбуці.

Я хочу зробити так, що коли я роблю "master git origin origin", він автоматично оновлює файли на моєму веб-сервері, а також зберігає резервну копію файлів попередньої комісії, щоб я міг легко відкатати, якщо захочу. Чи можливо це?


Цікаво - хто ваш хостинг-провайдер?
користувач

І чому ви хочете "створити резервну копію файлів попереднього комітету"? Ви можете просто натиснути на попереднє зобов’язання, якщо хочете відкотитись (припускаючи, що ви завжди знаєте, що ви натиснули останнім, але все одно ви повинні це знати).
sleske

Відповіді:


12

Це підсумовано з використання програми Git для управління веб-сайтом

Ключовим моментом цього процесу є гачок на стороні сервера "пост-отримання" (докладніше про гачки на git на сторінці Настроювання Git - Git Hooks та на сторінці людини githooks ). Цей гак запускається після того, як сервер отримав усі дані.

Після того, як сервер отримує дані, він запускає git checkout -f Опція -f змушує перевірити голову, навіть якщо є місцеві відмінності.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Помістіть це в hooks/каталог як post-receiveі виконуваний файл. Звичайно, шлях змінюється до того, де у вас є файли вашого веб-сервера (використання GIT_WORK_TREEвстановлює змінну середовища так, що вам не потрібно перемикати точкові файли та налаштування git на сервері).

Щоб повернути назад, слід помітити кожний випуск (це може бути зроблено і як частину гачка після завершення). Додавши теги до випуску, можна легко визначити місце для відкату, хоча це, ймовірно, включає вхід на сервер та перевірку цього тегу.


Слід зазначити, що це означає, що ви використовуєте git в якості інструменту розгортання, що не є дійсно призначеним. Це може спрацювати, але існують численні обмеження (потрібно завантажувати цілий репо-файл, ніякого способу викликати сценарії чи керувати дозволами файлів, ніякого способу розпакувати речі ...). Напевно, краще використовувати належний інструмент розгортання.
sleske

@sleske Ви можете зробити все це на post-receiveгачку, що насправді є лише сценарієм, де ви можете вкласти все, що завгодно.
Маріо

@Mario: Так, ви можете - це означає, що ви ефективно реалізуєте власне рішення щодо розгортання як гачок після отримання. Існує ще користь від використання існуючого рішення, але іноді може бути найкращим ...
sleske

Ви навіть можете зайти в проміжну папку і мати посилання з веб-папки на проміжну папку, щоб уникнути наявності .git-файлів у своїй веб-папці.
Схилився

0

Найпростіший спосіб оновити робоче дерево сховища, на яке ви натискаєте, - це налаштування git config receive.denyCurrentBranch updateInstead на стороні приймача. Дивіться https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

Відповідь Райана з гачками після фіксації краще тим, що вона дозволяє перевірити в іншому місці (ви, ймовірно, не хочете мати .git у своїй веб-папці). Але на цьому рівні може бути хорошою ідеєю використовувати якийсь існуючий інструмент розгортання, як сказав Sleske в коментарях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.