Обновите сайт с помощью одной команды (git push) вместо перетаскивания по FTP

Ситуация:

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

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

  • Заблокировать локально, пока я не доволен своим кодом.
  • Сделать ветки локально
  • Имейте одну главную ветвь, которая должна быть нажата на сервер
  • Обновите веб-сайт с помощью одной команды (git нажмите начальный мастер)

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


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

  • Создайте новую папку на моем компьютере (mkdir folder_x)
  • Перейдите в эту папку (cd folder_x)
  • Создайте новый репозиторий git (git init)
  • (git репозиторий успешно настроен)
  • Нажмите хранилище на сервер с помощью git push origin master (где источник настроен как пользователь: [email protected]) ​​

Ответ 2

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

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

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

Ответ 3

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

Он обновит ваше рабочее дерево, если вы настроили дистанционное репо как "голый".

Ответ 4

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

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

  • В вашем каталоге .git перейдите в папку hooks.
  • Создайте файл с именем post-receive "в папке с крючками" с этим контентом:

    #!/bin/sh

     # Обновление рабочего каталога после получения push от удаленных клиентов.

     # Это должно быть направлено на рабочий каталог Git.

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

  • Включить разрешения для выполнения файла, введя " chmod + x post-receive" в папку "hooks".

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

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

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