Git push на живой сервер - PullRequest
       52

Git push на живой сервер

46 голосов
/ 16 сентября 2010

У нас есть веб-сайт, на котором все файлы PHP / HTML / JS / CSS / etc хранятся в репозитории Git.

В настоящее время у нас есть 3 типа компьютеров (или вариантов использования) для репозитория.

  • Локальный разработчик: извлечение последних изменений, внесение изменений, принятие локального репо, загрузка на главный сервер
  • Главный сервер: центральное хранилище, все изменения передаются на главный сервер
  • Веб-сервер: изменения вносятся с главного сервера при развертывании веб-сайта

Итак, в настоящее время мы:

local: git push origin master
local: password: ********
local: ssh admin@webserver.com
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull origin master

Итак, мой вопрос: есть ли способ, которыйсо своего локального компьютера я могу нажать прямо на веб-сервере?

т.е..

local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********

Ответы [ 6 ]

37 голосов
/ 27 апреля 2011

Да, вы можете отправить напрямую на свой веб-сервер, но я бы не рекомендовал это делать, так как вам следует только передавать в репозитории, клонированные с аргументом --bare. Я бы использовал систему git hook, чтобы основной репозиторий автоматически обновлял репо на веб-сервере. Проверьте пост-обновление хук в:

http://git -scm.com / Docs / githooks

Этот скрипт, в свою очередь, может войти на веб-сервер через ssh и сделать

cd ~/domain.com/
git checkout master
git pull origin master

Таким образом, вам нужно только сосредоточиться на отправке на центральный сервер и не заботиться о веб-сервере, он всегда будет обновляться после выполнения отправки. Если вы можете автоматизировать что-то, то автоматизируйте это:)

Я даже нашел для вас хорошую статью о входе в систему через ssh в скрипте (если вы должны использовать пароль, это просто, если установлен ssh-ключ):

http://bash.cyberciti.biz/security/expect-ssh-login-script/

Надеюсь, это поможет!

29 голосов
/ 20 сентября 2012

У меня был тот же запрос, и я не был удовлетворен текущим ответом, получившим наибольшее количество голосов здесь, в итоге следовал git-website-howto , который довольно хорошо описывает процесс и является IMO намного чище и быстрее.

TL; DR, git init --bare для создания нового репо на вашем веб-сервере, где вы будете отправлять свои изменения с вашего компьютера разработчика.Когда веб-репозиторий получает ваши изменения, он запускает ловушку post-receive, которая затем копирует файлы в корневой веб-каталог.

Мне нравится этот подход, потому что ловушка post-receive выполняет работу на вашем сервере, поэтому ваш локальныймашина может толкаться намного быстрее и освободиться.Это также упрощает настройку удаленного отслеживания для определенной ветви.Таким образом, у вас может быть ветвь production для обновления вашего веб-сервера, в то время как ваш мастер по-прежнему предназначен для разработки и ссылки на ваш git-репозиторий в другом месте.

Примечание: вам нужно будет запустить git config receive.denycurrentbranch ignore на вашемрепозиторий веб-сервера для подавления предупреждения на локальном устройстве разработчика при нажатии.

10 голосов
/ 16 сентября 2010

Посмотрите на часть git urls http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html

, чтобы вы попытались:

git push ssh://admin@webserver.com/~admin/domain.com/ master

ДОБАВЛЕНО: Я думаю, что часть того, о чем вы просите, это как иметь несколько удаленныхрепозитории.

git remote add webserver ssh://admin@webserver.com/~admin/domain.com/

, что позволяет запускать:

   git push origin master
   git push webserver master
4 голосов
/ 16 сентября 2010

Я думаю, что функция, которую вы ищете, описана здесь: http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6-544f4834cda3

С local вы можете добавить веб-сервер в качестве удаленного, как и любой другой:

git remote add webserver admin@webserver:/path/to/repo.git/
# push only master branch by default
git config remote.webserver.push master  

Теперь, когда вы готовы к пушу, вы можете просто сделать:

git push webserver
1 голос
/ 29 июня 2018
  1. Добавить удаленный $ git remote add server ssh://server_hostname:/path/to/git/repo
  2. Оформить временную ветку на сервере $ git checkout -b temp
  3. Нажмите изменения $ git push server
  4. Оформить предыдущую ветку и удалить временную. $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp

У меня есть дополнительная справочная информация здесь: https://medium.com/@2upmedia/git-push-to-live-server-5100406a26

0 голосов
/ 20 февраля 2017

Перед развертыванием локальных изменений проверьте, изменилось ли что-либо на целевом сервере.

Добавьте в сценарий развертывания, чтобы ничего не изменилось на сервере:

$ git ls-files -dmo --exclude-standard

Будет пустым, если есть неизмененные файлы, проще, чем анализ состояния git

...