Подтвердить что ты не робот

Git нажмите на живой сервер

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

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

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

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

local: git push origin master
local: password: ********
local: ssh [email protected]
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: ********
4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Посмотрите на страницу git URL-адресов http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html

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

git push ssh://[email protected]/~admin/domain.com/ master

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

git remote add webserver ssh://[email protected]/~admin/domain.com/

который позволяет запускать:

   git push origin master
   git push webserver master

Ответ 4

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

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

git remote add webserver [email protected]:/path/to/repo.git/
# push only master branch by default
git config remote.webserver.push master  

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

git push webserver

Ответ 5

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

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

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

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