2009-05-19 6 views
10

положения:сайт Обновления с помощью одной команды (мерзавец толчка) вместо FTP перетащить и падение

  • У меня есть локальная копия сайта
  • У меня есть сервер, который я имею доступ по SSH к

Что я хочу делать?

  • Commit локально, пока я доволен своим кодом
  • Сделать ветви локально
  • Есть один мастер ветвь, это тот, который должен быть прижаты к серверу
  • Обновление веб-сайта с помощью одной команды (git push origin master)

Если я настроил git repo локально, используя git init, а затем нажмите на папку на сервере, это не сработает. Когда я FTP на сервер, чтобы проверить файлы, они на самом деле там. Когда я нахожу SSH на сервере и делаю git статус, он не чист, хотя это должно быть, так как я просто нажал на сервер.


шаги, которые я делаю:

  1. Сделать новую папку на компьютере (MkDir folder_x)
  2. Перейти в эту папку (кд folder_x)
  3. Настройка нового хранилища Git там (git init)
  4. (git-хранилище настроено успешно)
  5. Нажмите хранилище на сервер, используя главный источник git push (где origin is s et as as user: [email protected]) ​​
+0

duplicate http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

+0

Возможный дубликат [Развертывание проекта с использованием Git push] (http://stackoverflow.com/questions/279169/ развертывание-а-проект-используя-ГИТ-толчок). [git config receive.denyCurrentBranch updateInstead] (http://stackoverflow.com/a/28381235/895245) на пульте дистанционного управления - хорошая возможность. –

ответ

12

Вам необходимо написать крюк после приема, который запускает git checkout -f после того, как удаленный репозиторий git получает нажатие. См. Using Git to manage a web site.

+1

кажется, что я фактически не работаю на своем веб-сервере. Так что любая работа, проделанная там, потеряна – gman

+0

С Git 2.3 вам больше не нужен этот крючок, вы можете сделать 'git config receive.denyCurrentBranch updateInstead'. См. Https://github.com/blog/1957-git-2-3-has-been-released. – Aurelien

+1

Я думаю, комментарий @Aurelien должен быть принятым ответом! Очень приятное решение! –

1

Когда вы нажимаете на репозиторий git, он не обновляет рабочие файлы репозитория. Обычно, когда вы нажимаете, вы должны нажимать на пустой репозиторий - кажется, это то, как они намеревались использовать git для работы.

Для одного из моих (местных) проектов я написал сценарий, чтобы автоматически проверять последний подкаталог «ui», когда я нажимаю свою работу на репозиторий развертывания. Он встроен в предыдущий ответ здесь: Developing Django projects using Git

Вы также можете просто использовать крюк после обновления на сервере, выполнив команду «git reset -hard master», если кто-то нажимает обновление для мастера и использует не-голый репо, а не иметь отдельную область для файлов с проверкой.

0

я использую крючок после обновления, как описано в этой записи Справка: http://git.or.cz/gitwiki/GitFaq#non-bare

Это обновит ваше рабочее дерево, если вы настроили удаленный репозиторий как «голый».

0

Git Версия 1.9.1
Ubuntu Server 14.04 LTS
LAMP Server

Я установил свой LAMP-сервер для обновления моего рабочего каталога моего Git-репо, когда один из моих веб-разработчиков нажимает на сервер изменения. Я заметил, что журнал будет замечать новые коммиты, но не будет обновлять рабочий каталог. Вместо того, чтобы делать это вручную (git checkout -f) для каждого обновления, это можно установить автоматически, чтобы сделать это после получения push.

  1. В каталоге ".git", перейдите в "крючками" папку.
  2. Создайте файл с именем «после приема» в пределах «крючками» папка с этим содержимым:!

    #/бен/ш

    # Обновление рабочего каталога после толчка от удаленных клиентов.
    # Это должно быть направлено на рабочий каталог git.

    GIT_WORK_TREE =/вар/WWW/dev_site мерзавец фотографии -f

  3. Включить разрешения на выполнение файла, введя "CHMOD + х после приема" в папке "крючками".

Теперь он обновит рабочий каталог, когда коммиты будут перенесены в репозиторий Git. Мой сайт теперь показывает изменения, когда я посещаю его в браузере.

В этом примере мой рабочий каталог «/var/www/dev_site». Измените это в соответствии с тем, где находится ваш репо.

Обратите внимание, что это репо не является голой репо. Голый репо не имеет рабочего каталога, с которого может считывать веб-сервер.