Развёртывание проекта через GIT

git-90x90 Проблема — копирование файлов проекта на рабочий сервер, оперативное обновление и поддержка в актуальном состоянии.

Как я это делал давным-давно?

Как и все нормальные люди, я это делал через FTP, ну или в лучшем случае SFTP. Изначально берёшь и заливаешь тучу файлов.

А вот как в дальнейшем синхронизировать изменения? Меня спасал Netbeans. Там была опция позволяющая заливать по FTP конкретный файл с изменениями прямо при сохранении. Проблема была в том, что Netbeans был глючный и тормозной, синхронизировал порой что надо и что не надо, при этом знатно подвисая. А если учесть, что иногда FTP давал сбой и заливалась часть файла (и поди угадай, какого именно), то это был тот ещё головняк для больших проектов!

Как я это делал в одном проекте?

Эти ребята сделали прикольно! Код их проектов хранится прямо на github.com. И когда один из разработчиков делает git push вызывается web-hook который заставляет сервер дёрнуть свежую версию с серва.

Очень удобно! Пишешь код, отлаживаешь и всё такое, и когда готово делаешь «git push» — и твои изменения на продакшене!

Как я хочу сделать для своего проекта

Я очень не хочу возвращаться к кошмарному Netbeans с его синхронизацией, и очень хочу сделать как эти ребята.

Но моя проблема с github в том, что я не хочу делать свой код публично доступным, а делать его закрытым стоит денег. Да и разработчиков я много не планирую. Вобщем собрался я делать это на своём хосте.

Реализация

Для начала завёл SSH аккаунт, настроил ключи

Дальше дело за git-репозиторием. Я сначала думал, что можно использовать в качестве репозитория прямо рабочую папку проекта на сервере. Но оказалось, что в таком варианте я не смогу делать git push. Ибо предполагается что та папка с файлами — тоже может быть папкой разработки и тоже может содержать какие-то свои изменения и даже коммиты. И если сделать пуш в ту же ветку, то там будет непонятная каша.

Чтобы избежать этого надо ввести некий главный, промежуточный, «ЧИСТЫЙ»(bare) репозиторий
bare-repo

В идеале к этому репозиторию могут подключаться сколько угодно разработчиков, но в моём случае — я, единственный разработчик, ну и ещё рабочая папка проекта на сервере будет как-то дёргать эти изменения.

1. Создаём чистый репозиторий
——————————
Сначала определяемся с папкой, где оно будет храниться

git init
echo "Hello, world." >> file.txt
git add file.txt
git commit -m 'First commit.'
git config --bool core.bare true

Первые несколько команд — это просто создание нового репозитория и первого коммита. А последняя команда — сделать репозиторий «чистым». Всё. После этого из репозитория можно убрать все файлы кроме папки .git

2. Клонируем репозиторий к разработчику
—————————————-
Тут всё более менее стандартно. Подключаемся по SSH, который уже настроили.

git clone user@host:path/to/repo

Собственно всё. Папка разработчика готова к работе и всяким изменениям.

3. Папка проекта
—————————————

Поскольку чистый репозиторий у меня лежит на том же хосте, что и проект, то клонируем репозиторий подключаясь локально

git clone path/to/bare/repo path/to/deployment/dir

Теперь я хочу, чтобы эта репозитория автоматически делала git pull когда разработчик делает git push

Для этого надо в папке чистого репозитория зайти в папку hook

cd ../path/to/bare/repo/.git/hooks
touch post-receive
chmod +x post-receive

Потом скачать и скопировать туда содержимое вот этого файла post-receive

Всё! Работает! Сделал пуш — и код на сервере!

Развёртывание проекта через GIT: Один комментарий

  1. SunChaser

    Бесплатные приватные гит-репо можно создать на bitbucket или gitlab (второй не рекмендую правда — у него серьезные проблемы со стабильностью)

Комментарии запрещены.