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: ********
Ответы
Ответ 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