Статьи

Идеальный рабочий процесс с Git, GitHub и SSH

В этом уроке мы сосредоточимся на рабочем процессе. В частности, мы будем использовать полезные хуки сервисов GitHub для автоматического обновления проекта на нашем персональном сервере всякий раз, когда мы отправляем обновления в репозиторий GitHub.



Нам определенно нужен какой-то проект, чтобы поиграть, верно? Давайте сделаем это прямо сейчас. Используя любой инструмент, который вы предпочитаете (я бы порекомендовал Structurer ), создайте новый каталог с именем awesomeProject и добавьте файл index.html . Не стесняйтесь заполнить это с некоторой бессмысленной разметкой в ​​настоящее время.

Имея наш тестовый каталог, давайте создадим наш первый коммит Git.

Если вы не знакомы с Git, я настоятельно рекомендую вам сначала ознакомиться с « Easy Version Control with Git ».

Откройте командную строку:

1
2
3
4
cd path/to/awesomeProject
git init
git add .
git commit -m ‘First commit’

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


Следующим шагом является загрузка нашего проекта на GitHub. Таким образом, мы можем легко вызвать git pull для загрузки этого проекта с любого компьютера / сервера, который пожелаем.

Опять же, если вы не знакомы с GitHub и еще не создали учетную запись, прочитайте Terminal, Git и GitHub для остальных из нас .

Начните с создания нового репозитория Git.

Создать Git Repo

Далее вам нужно будет заполнить некоторые детали вашего проекта. Это просто:

Детали

И, наконец, поскольку мы уже работаем с существующим репозиторием Git, нам нужно только запустить:

1
2
git remote add origin [email protected]:Your-Username/awesomeProject.git
git push -u origin master
Гит

Благодаря этому наш awesomeProject теперь доступен на GitHub. Это было легко!


Теперь нам, безусловно, нужен своего рода предварительный просмотр нашего проекта, который в идеале должен храниться на нашем собственном сервере. Но иногда это может быть больно. Передайте свои обновления на GitHub, войдите на свой сервер, вручную перенесите обновленный каталог и т. Д. Конечно, это займет всего минуту или около того, но когда вы вносите несколько изменений в течение дня, это может быстро стать бременем.

Но по одному шагу за раз. Мы разберемся с этой дилеммой на шаге 4. А пока давайте просто подключим репозиторий Git к нашему серверу. Для этого нам нужно SSH в.

В зависимости от вашего хоста ваши учетные данные SSH могут немного отличаться. Поищите в Google «ваше имя хоста SSH», и вы обязательно найдете необходимые инструкции. Как только вы будете готовы, давайте двигаться дальше:

Мы будем использовать мой личный сервер в качестве примера:

1
2
<enter your host password>

И с этими двумя строчками мы в деле!

SSH

Далее мы cd в родительский каталог, где мы хотим хранить awesomeProject . Для меня это будет: cd domains/demo.jeffrey-way.com/html/ . Конечно, измените это в соответствии с вашей собственной структурой каталогов.

Давайте теперь клонируем репозиторий GitHub.

1
git clone [email protected]:Your-User-Name/awesomeProject.git

Дайте этой команде несколько секунд, но, прежде чем вы это узнаете, этот каталог теперь доступен на вашем сервере, и, в моем случае, его можно посмотреть по адресу: http://demo.jeffrey-way.com/awesomeProject .


На данный момент проблема заключается в том, что между нашим репозиторием GitHub и каталогом, хранящимся на нашем сервере, нет особой связи — по крайней мере, это не автоматическое соединение. Например, если мы обновим наши исходные файлы на нашем локальном компьютере, а затем отправим изменения в GitHub:

1
2
3
git add index.html
git commit -m ‘Added photo of dancing chicken’
git push origin master

Эти изменения, безусловно, не будут отражены на нашем сервере. Конечно, они не будут! Чтобы сделать это, мы должны — еще раз — SSH на наш сервер, cd в каталог awesomeProject и выполнить еще одно git pull для awesomeProject обновленных исходных файлов.

Разве не было бы замечательно, если бы каждый раз, когда мы помещали обновления в GitHub, эти новые исходные файлы автоматически обновлялись на нашем сервере предварительного просмотра в реальном времени?

Как оказалось, мы можем сделать это довольно легко с помощью сервисных хуков GitHub.

Сервисные крючки GitHub

Вы можете получить доступ к этой странице, нажав кнопку «Администратор» в репозитории GitHub, а затем нажав «Сервисные зацепки». Опция «Post-Receive URL» будет указывать GitHub отправлять POST-запрос на указанную страницу каждый раз, когда вы отправляете в репозиторий GitHub. Это именно то, что нам нужно!

«Мы отправим эти URL-адреса с помощью запросов POST, когда вы отправите нам информацию о передаче».

Чтобы это работало, нам нужно создать еще один файл, который будет обрабатывать процесс выполнения git pull . Добавьте новый файл с именем github.php (или что угодно, желательно более расплывчатый) и добавьте:

1
<?php `git pull`;

Итак, теперь вы думаете: «Джефф сошел с ума. Вы не можете поместить скрипт Bash в строку PHP». Ну … да, вы можете, как только вы поймете, что это не одиночные кавычки выше, это обратные тики.

Когда вы заключаете последовательность в бэк-тики, в PHP она будет рассматриваться как скрипт Bash. Фактически, это идентично использованию функции bash_exec .

Сохраните этот файл и загрузите его в каталог awesomeProject на вашем сервере. По завершении скопируйте URL-адрес в этот файл и вставьте его в текстовое поле «URL-адрес после получения». В моем случае URL-адрес будет http://demo.jeffrey-way.com/awesomeProject/github.php .

При этом каждый раз, когда вы awesomeProject в awesomeProject GitHub, этот файл будет вызываться, и каталог awesomeProject на вашем сервере будет автоматически обновляться без необходимости перемещать палец. Довольно изящно, а?