Обновите веб-сайт с помощью одной команды (git push) вместо перетаскивания по FTP - PullRequest
10 голосов
/ 19 мая 2009

Положение:

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

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

  • Локальный коммит, пока я не буду доволен своим кодом
  • Создание филиалов локально
  • Иметь одну основную ветвь, которая должна быть отправлена ​​на сервер
  • Обновление сайта с помощью одной команды (git push origin master)

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


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

  1. Создать новую папку на моем компьютере (mkdir folder_x)
  2. Перейдите в эту папку (cd folder_x)
  3. Создайте там новый репозиторий git (git init)
  4. (репозиторий git успешно настроен)
  5. Передать репозиторий на сервер с помощью мастера git push origin (где источник задан как user: pass@server.tld) ​​

Ответы [ 4 ]

12 голосов
/ 19 мая 2009

Вам нужно написать ловушку пост-получения, которая запускается git checkout -f после того, как удаленный репозиторий git получает push. Подробнее см. Использование Git для управления веб-сайтом .

1 голос
/ 19 мая 2009

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

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

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

0 голосов
/ 28 января 2015

Git Version 1.9.1
Ubuntu Server 14.04 LTS
Сервер LAMP

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

  1. В каталоге " .git " перейдите в папку " hooks ".
  2. Создайте файл с именем " post-receive " в папке " hooks " с таким содержимым:

    #! / Bin / sh

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

    GIT_WORK_TREE = / var / www / dev_site git checkout -f

  3. Включите разрешения для запуска файла, введя « chmod + x post-receive » в папке «hooks».

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

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

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

0 голосов
/ 03 июня 2009

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

Он обновит ваше рабочее дерево, если вы настроили удаленное хранилище как «голое».

...