GIT - Автоматическое развертывание проектов


13.06.2019

GIT - распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года.

Эта краткая инструкция по GIT позволит быстро научиться разворачивать и поддерживать на сервере Ваши проекты.

Настройка НА СЕРВЕРЕ

(минимальная инструкция)

Репозиторий в папке: /var/git/site.git
Рабочая папка (сайта): /var/www/test


cd /var
mkdir git && cd git
mkdir site.git && cd site.git
git init --bare

В папке /var/git/site.git/hooks
создаем файл с именем post-receive он будет копировать файлы из репозитория в рабочую папку сайта

Содержимое файла:


#!/bin/sh
git --work-tree=/var/www/test --git-dir=/var/git/site.git checkout -f

В --work-tree указываем папку, куда закидывать файлы.
--git-dir - папка репозитория

Разрешаем запускать файл:


chmod +x post-receive

Примечание: Проверяем чтобы в папке logs на файлы были права на запись для пользователя (пользователей) который (которые) будут работать с репозиторием.

Локальная машина

Рабочая папка: /my/workspace
Сервер: 192.168.1.100
Пользователь: andre
Имя удаленного репозитория: live
Примечание: Порт SSH должен быть открыт.


cd /my/workspace
mkdir project && cd project
git init
git remote add live ssh://[email protected]/var/git/site.git

Создаем, правим файлы в папке /my/workspace/project

Отправка файлов с локальной машины


git add .
git commit -m "Commit 1"
git push live master

После этого файлы из локальной машины попадают в удаленный репозиторий на сервере и копируются в рабочую папку сайта.

Откат назад и корректировка

При необходимости откатиться на один или несколько коммитов назад делай так. На сервере:


cd /var/git/site.git
git log

Видим что-то типа:

commit 23bbca65dd98b1db9e19571ba779a3af9b21281f (HEAD -> master)
 Author: Andrey Koryagin [email protected]
 Date:   Thu Jun 13 13:33:44 2019 +0300
 Commit Wow1
 commit 7a17ee44ae24a8f8e68320f27fa3fba515cd3491
 Author: Andrey Koryagin [email protected]
 Date:   Thu Jun 13 13:31:29 2019 +0300
 Commit Wow
 commit bfe5f3b9efe6faca32b3463fb4a63cd5645c8482
 Author: Andrey Koryagin [email protected]
 Date:   Thu Jun 13 13:24:49 2019 +0300
 Commit Test2
 commit 7d888f5edc635801e2f3eb111927b9fc74085bf4
 Author: Andrey Koryagin [email protected]
 Date:   Thu Jun 13 13:23:27 2019 +0300
 Commit Test1

Смотрим имена комитов и находим нужный, например, предыдущий 7a17ee44ae24a8f8e68320f27fa3fba515cd3491

Откатываем на нужный нам каммит:


git --work-tree=/var/www/test --git-dir=/var/git/site.git checkout 7a17ee44ae24a8f8e68320f27fa3fba515cd3491

Далее спокойно НА ЛОКАЛЬНОЙ МАШИНЕ правим файлы и спокойно заливаем как делали это раньше. В результате на сервере в репозитории появятся обновления, а в папке сервера НЕТ! Потому как HEAD смотрит на коммит, который мы указали при откате.

В этом можно убедиться посмотрев результат команды:


git log --all

--all нужен чтобы посмотреть все коммиты, без него будет видны только коммиты до того на который сейчас смотрит HEAD.

Теперь на сервере нужно вернуть репозиторий в нормальное состояние командой:


git --work-tree=/var/www/test --git-dir=/var/git/site.git checkout master

После чего в рабочей папке появится крайнее обновление. А HEAD будет указывать куда надо. Работаем дальше и не косячим.

Удалить последний коммит

Если очень хочется, можно удалить последний коммит (но я бы так не делал):


git reset --soft HEAD~

Объединить все коммиты в один


git reset $(git commit-tree HEAD^{tree} -m "commit message")

Далее при выполнении "push" необходимо добавлять опцию "-f":


git push -f

Клонирование

Для того чтобы скачать репозиторий с сервера на локальную машину, в какой нибудь рабочей папке выполняем:


git clone ssh://[email protected]/var/git/site.git

Для удобства можно его обозвать live, как раньше:


git remote add live ssh://[email protected]/var/git/site.git

Можно работать.

Pull

Если на сервере были обновления и Вам нужно их скопировать в локальный репозиторий:


git pull ssh://[email protected]/var/git/site.git

GitWeb

В каталоге /var/git/site.git запускаем:


git instaweb

Возможно перед этим потребуется установить lighttpd. Сервер запуститься на порту 1234. В браузере смотрим http:/127.0.0.1:1234

Для остановки сервера:


git instaweb --stop

Полезное чтиво

Web-dev склерозник
Коментарі:
Додати коментар
Code
* - обов'язкові поля

Архіви