Можно ли развернуть сайт с помощью git push
? У меня есть предчувствие, что это как-то связано с использованием git-хуков для выполнения git reset --hard
на стороне сервера, но как мне это сделать?
git
deployment
webserver
githooks
Кайл Кронин
источник
источник
Ответы:
Я нашел этот скрипт на этом сайте, и он, кажется, работает довольно хорошо.
В локальной копии измените файл .git / config и добавьте свой веб-сервер в качестве удаленного:
На сервере замените этот файл на .git / hooks / post-update (ответ ниже)
Добавить исполняемый доступ к файлу (опять же на сервере):
Теперь просто локально нажмите на ваш веб-сервер, и он должен автоматически обновить рабочую копию:
источник
Используя файл пост-обновления ниже:
В локальной копии измените файл .git / config и добавьте свой веб-сервер в качестве удаленного:
На сервере замените .git / hooks / post-update файлом ниже
Добавить исполняемый доступ к файлу (опять же на сервере):
Теперь просто локально нажмите на ваш веб-сервер, и он должен автоматически обновить рабочую копию:
источник
После многих фальстартов и тупиков, я наконец-то смог развернуть код сайта просто с помощью «git push remote » благодаря этой статье .
Сценарий автора после обновления занимает всего одну строку, и его решение не требует настройки .htaccess, чтобы скрыть репозиторий Git, как это делают некоторые другие.
Пара камней преткновения, если вы развертываете это на экземпляре Amazon EC2;
1) Если вы используете sudo для создания чистого конечного репозитория, вы должны сменить владельца репо на ec2-user, иначе загрузка не удастся. (Попробуйте "chown ec2-user: ec2-user repo .")
2) Push не удастся, если вы предварительно не сконфигурируете расположение вашего amazon-private-ключа .pem, либо в / etc / ssh / ssh_config в качестве параметра IdentityFile, либо в ~ / .ssh / config, используя "[[ Host] - HostName - IdentityFile - User "макет описан здесь ...
... ОДНАКО, если Host настроен в ~ / .ssh / config и отличается от HostName, Git push не удастся. (Это, вероятно, ошибка Git)
источник
не устанавливайте git на сервер и не копируйте туда папку .git. чтобы обновить сервер из клона git, вы можете использовать следующую команду:
Возможно, вам придется удалить файлы, которые были удалены из проекта.
это копирует все проверенные файлы. rsync использует ssh, который в любом случае установлен на сервере.
чем меньше программного обеспечения установлено на сервере, тем более он безопасен и тем проще управлять его конфигурацией и документировать его. также нет необходимости хранить полный git-клон на сервере. это только усложняет, чтобы защитить все должным образом.
источник
По сути, все, что вам нужно сделать, это следующее:
У меня есть эти строки в моем приложении в качестве исполняемого файла
deploy
.поэтому, когда я хочу сделать развертывание, я печатаю
./deploy myserver mybranch
.источник
ssh -A ...
git pull
следует избегать автоматического развертывания , поскольку слияние часть может потребовать ручной очистки , если есть какие - либо конфликты.То, как я это делаю, это то, что у меня есть пустой Git-репозиторий на моем сервере развертывания, куда я помещаю изменения. Затем я захожу на сервер развертывания, перехожу на фактический каталог документов веб-сервера и выполняю git pull. Я не использую никаких хуков, чтобы попытаться сделать это автоматически, это кажется большим количеством проблем, чем оно того стоит.
источник
git reset
для возврата к последним изменениям (все фиксации, а не только весь запрос). Если вам нужно откатить что-то конкретное, что не является последним коммитом, то вы можете использовать его,git revert
но, вероятно, его следует использовать только в чрезвычайных ситуациях (git revert
создает новый коммит, который отменяет эффект некоторого предыдущего коммита).git config --local receive.denyCurrentBranch updateInstead
Добавленная в Git 2.3, это может быть хорошей возможностью: https://github.com/git/git/blob/v2.3.0/Documentation/config.txt#L2155
Вы устанавливаете его в хранилище сервера, и оно также обновляет рабочее дерево, если оно чистое.
В 2.4 были улучшены улучшения с
push-to-checkout
обработкой нерожденных веток .Пример использования:
Вывод:
У этого есть следующие недостатки, упомянутые в объявлении GitHub :
Но все эти моменты выходят за рамки Git и должны решаться внешним кодом. Таким образом, в этом смысле это, вместе с хуками Git, является окончательным решением.
источник
Обновление: сейчас я использую решение Ллойда Мура с ключевым агентом
ssh -A ...
. Вытягивание основного репо, а затем параллельное извлечение со всех ваших машин происходит немного быстрее и требует меньше настроек на этих машинах.Не видя этого решения здесь. просто нажмите через ssh, если на сервере установлен git.
Вам понадобится следующая запись в вашем локальном .git / config
Но что с этим
amazon:
? В вашей локальной ~ / .ssh / config вам нужно добавить следующую запись:теперь вы можете позвонить
(Кстати: /path/to/project.git отличается от фактического рабочего каталога / path / to / project)
источник
Для сценария развертывания
В нашем сценарии мы храним код в github / bitbucket и хотим развернуть его на живых серверах. В этом случае у нас работает следующая комбинация (это ремикс ответов с большим количеством голосов здесь) :
.git
каталог на ваш веб-серверgit remote add live ssh://user@host:port/folder
git config receive.denyCurrentBranch ignore
На удаленном:
nano .git/hooks/post-receive
и добавить этот контент:#!/bin/sh GIT_WORK_TREE=/var/www/vhosts/example.org git checkout -f
На пульте:
chmod +x .git/hooks/post-receive
git push live
Ноты
Если ваша
.git
папка находится в корневом каталоге документа, убедитесь, что вы скрыли ее снаружи, добавив в.htaccess
( источник ):RedirectMatch 404 /\..*$
источник
Мы используем Capistrano для управления развертыванием. Мы строим capistrano для развертывания на промежуточном сервере, а затем запускаем rsync со всеми нашими серверами.
С Capistrano, мы можем сделать легкий откат в случае ошибки
источник
Giddyup - это не зависящие от языка git-хуки типа " просто добавь воды", которые автоматизируют развертывание с помощью git push. Это также позволяет вам иметь пользовательские перехватчики запуска / остановки для перезапуска веб-сервера, разогрева кеша и т. Д.
https://github.com/mpalmer/giddyup
Проверьте примеры .
источник
Похоже, у вас должно быть две копии на вашем сервере. Чистая копия, из которой вы можете нажать / вытащить, после чего вы внесете изменения, когда вы закончите, и затем вы клонируете это в свой веб-каталог и настроите cronjob для обновления git pull из вашего веб-каталога каждый день или так.
источник
Можно предположить, что можно настроить git hook, чтобы, когда говорят, что сделан коммит, чтобы сказать «стабильную» ветвь, он будет тянуть изменения и применять их к PHP-сайту. Большим недостатком является то, что у вас не будет большого контроля, если что-то пойдет не так, и это добавит время к вашему тестированию - но вы можете получить представление о том, сколько работы потребуется, когда вы объединитесь, скажем, ваша магистральная ветка с стабильной веткой, чтобы знать сколько конфликтов вы можете столкнуться. Будет важно следить за любыми файлами, относящимися к конкретному сайту (например, файлами конфигурации), если только вы не собираетесь запускать только один сайт.
В качестве альтернативы вы рассматривали возможность изменения сайта?
Для получения информации о git hooks смотрите документацию githooks .
источник
Мой взгляд на решение христиан .
источник
Я использую следующее решение от toroid.org , которое имеет более простой скрипт хука.
на сервере:
и установите хук на сервере:
на вашем клиенте:
затем, чтобы опубликовать, просто введите
На сайте есть полное описание: http://toroid.org/ams/git-website-howto
источник
git push web +master:refs/heads/master
вместо простоgit push web master
?В качестве дополнительного ответа я хотел бы предложить альтернативу. Я использую git-ftp, и он отлично работает.
https://github.com/git-ftp/git-ftp
Простой в использовании, только тип:
и git автоматически загрузит файлы проекта.
С уважением
источник
В условиях, когда у нескольких разработчиков есть доступ к одному и тому же репозиторию, могут помочь следующие рекомендации.
Убедитесь, что у вас есть группа Unix, к которой принадлежат все разработчики, и передайте права собственности на репозиторий .git этой группе.
В .git / config хранилища сервера установите sharedrepository = true. (Это говорит git разрешить нескольким пользователям, что необходимо для фиксации и развертывания.
установите umask каждого пользователя в своих файлах bashrc одинаковым - 002 - хорошее начало
источник
Я закончил тем, что создал свой собственный элементарный инструмент развертывания, который будет автоматически извлекать новые обновления из репозитория - https://github.com/jesalg/SlimJim - По сути, он слушает github post-receive-hook и использует прокси для запуска обновить скрипт.
источник
Я использую два решения для ловушки после получения:
DEPLOY SOLUTION 1
DEPLOY SOLUTION 2
Оба решения основаны на более ранних решениях, доступных в этой теме.
Обратите внимание, BRANCH_REGEX = '^ $ {GIT_BRANCH1}.$ 'фильтрует имена ветвей, совпадающие со строкой "master " или "dev *", и развертывает рабочее дерево, если соответствующая ветвь совпадает. Это позволяет развернуть версию dev и master версию в разных местах.
DEPLOY SOLUTION 1 удаляет только те файлы, которые являются частью репо и были удалены коммитом. Это быстрее, чем Deployment Solution 2.
Преимущество DEPLOY SOLUTION 2 состоит в том, что он удалит все новые файлы из производственного каталога, который был добавлен на стороне сервера, независимо от того, был ли он добавлен в репозиторий или нет. Это всегда будет чистый дуп из репо. Это медленнее, чем Deployment Solution 1.
источник