21.07.2014 Настройка git репозитория для сайта
#155

Настройка git репозитория для сайта

Настройка GIT репозитория для автоматического применения изменений.

Что имеем:
1. Веб-сервер и директория сайта (/var/www/site/public), извне веб-сервер должен давать доступ только к папке public для безопасности проекта, чтобы не было возможности скачать файлы git репозитория.
2. IDE (в нашем случае будем рассматривать Aptana).

Что требуется:
1. Git репозиторий текущего сайта.
2. Автоматическое применение изменений на live копии сайта после выполнения команды push разработчиком (из IDE или консоли).
3. Использование одного IDE для команды разработчиков.

Далее описание того, как достичь поставленных целей.

1. Устанавливаем Git, пример для debian (также git должен быть установлен на всех компьютерах разработчиков):
  1. # apt-get install git


2. Создаем системного пользователя, который будет управлять нашим git репозиторием.
  1. # adduser gituser


3. После установки Git (это касается и компьютеров разработчиков), первое, что вам следует сделать — указать ваше имя и адрес электронной почты. Это важно, потому что каждый коммит в Git содержит эту информацию, и она включена в коммиты, передаваемые вами, и не может быть далее изменена (у разработчиков будут другие имя и email), не забываем выполнить вход под нашим новым пользователем:
  1. $ git config --global user.name "gituser"
  2. $ git config --global user.email gituser@example.com


4. Далее создадим наш основной репозиторий для live сайта (не забываем дать новому системному пользователю права на каталог).
  1. $ cd /var/www/site
  2. $ git init


Для того, чтобы добавить все текущие файлы проекта под версионный контроль выполняем команду add в этой же папке, а затем осуществляем первую фиксацию изменений:
  1. $ git add *
  2. $ git commit -m 'initial project version'


Определить состояние файлов репозитория можно выполнив следующую команду, после чего будет выведен текст о состоянии репозитория:
  1. $ git status
  2. # On branch master
  3. nothing to commit (working directory clean)


5. Для того чтобы осуществить первоначальную настройку любого Git-сервера, необходимо экспортировать существующий репозиторий в новый "голый" репозиторий, т.е. репозиторий без рабочего каталога. Обычно это несложно сделать. Чтобы склонировать ваш репозиторий и создать новый "голый" репозиторий, выполните команду "clone" с параметром "--bare". По существующему соглашению, каталоги с голыми репозиториями заканчиваются на ".git", это будет репозиторий, который разработчики будут скачивать и в который будут уходить все изменения:
  1. $ cd /var/www
  2. $ git clone --bare site site.git


6. Вернемся в каталог нашего сайта и добавим bare репозиторий, как удаленный репозиторий и сразу проверим добавился ли он или нет:
  1. $ cd /var/www/site
  2. $ git remote add hub /var/www/site.git
  3. $ git remote show hub


7. Теперь настроим автоматическую синхронизацию этих двух репозиториев. Реализуется это с помощью хуков.

Установка хука (перехватчика), немного информации:
Все перехватчики хранятся в подкаталоге hooks в Git-каталоге. В большинстве проектов это .git/hooks. По умолчанию Git заполняет этот каталог кучей примеров сценариев, многие из которых полезны сами по себе, но кроме того в них задокументированы входные значения для каждого из сценариев. Все эти примеры являются сценариями для командной оболочки с вкраплениями Perl'а, но вообще-то будет работать любой исполняемый сценарий с правильным именем — вы можете писать их на Ruby или Python или на чём-то ещё, что вам нравится. Эти файлы с примерами перехватчиков оканчиваются на .sample; вам надо их переименовать.
Чтобы активировать сценарий-перехватчик, положите файл в подкаталог hooks в Git-каталоге, дайте ему правильное имя и права на исполнение. С этого момента он будет вызываться. Подробнее...

Итак, имея общее представление о хуках, можно добавить их в наши репозитории.

Для нашего bare репозитория (/var/www/site.git) хуки будут находиться здесь:
/var/www/site.git/hooks/

Добавим в bare репозиторий следующий хук с название "post-update", как только в bare репозиторий поступят новые изменения от разработчиков, сразу будет выполнен этот скрипт. Скрипт выполняет переход в репозиторий с live копией сайта (/var/www/site), и вытягивает измениния из bare репозитория. Проталкивание изменений (push) не изменяет состояния рабочего каталога репозитория, поэтому и нужно делать pull, находясь в рабочем каталоге. Размещаем этот код в хук "post-update":
  1. #!/bin/sh
  2.  
  3. echo
  4. echo "**** Вытягиваем изменения в live [Hub's post-update hook]"
  5. echo
  6.  
  7. cd /var/www/site || exit
  8. unset GIT_DIR
  9. git pull hub master
  10.  
  11. exec git-update-server-info



Для нашего репозитория с live копией сайта (/var/www/site) хуки доступны по следующему адресу:
/var/www/site/.git/hooks/
И сюда мы добавим хук "post-commit" со следующим содержимым, который будет запускаться после каждого коммита и отправит все изменения в bare репозиторий:
  1. #!/bin/sh
  2.  
  3. echo
  4. echo "**** pushing changes to Hub [Prime's post-commit hook]"
  5. echo
  6.  
  7. git push hub


8. Теперь необходимо дать доступ в этим репозиториям удаленным пользователям, будем считать, что все происходит в локальной сети и у нашего сервера статичный IP адрес, например такой:
192.168.1.100

Здесь нам нужно установить ssh сервер, но в большинстве unix-подобных систем он присутствует по умолчанию. Поэтому на этом моменте останавливаться не будем.

Для того, чтобы удаленный пользователь имел доступ к ssh нашего сервера, без проверки пароля, создадим на его машине открытый ssh ключ, который можно сгенерировать следующей командой (ответив на вопросы):
$ ssh-keygen

Теперь этот пользователь должен послать свой открытый ключ вам или тому, кто администрирует Git-сервер (предположим, что ваш SSH-сервер уже настроен на работу с открытыми ключами). Для этого нужно скопировать всё содержимое файла с расширением .pub и разместить на сервере в каталоге нашего пользователя (gituser), в файле "authorized_keys":
~/.ssh/authorized_keys

9. Для импорта проекта с git сервера в IDE Aptana выполняем следующие действия (предполагается что aptana установлена и назначен рабочий каталог):
File->Import

В открывшемся окне
Git->Git Repository as New Project

В качестве URI указываем пользователя и адрес сервера, а также папку с репозиторием:
gituser@192.168.1.100:/var/www/site.git/

После этих действий на нашей клиентской машине будет находиться копия нашего серверного репозитория.
Теперь можно делать коммиты и пуши для внесения изменений на наш сайт.
Правой кнопкой нажимаем по проекту, выбираем "Team" и после внесения изменений делаем "Commit", а затем "Push".

10. Сменить тему оформления в Aptana можно следующим образом:
Windows->Preferences->Aptana Studio->Themes

11. Aptana: отформатировать код в документе можно комбинацией клавиш:
ctrl shift f

Ссылки на статьи:
1. Учебник по Git (на русском языке)
1.1. 1.5 Введение - Первоначальная настройка Git
1.2. 2.1 Основы Git - Создание Git-репозитория
1.3. 2.2 Основы Git - Запись изменений в репозиторий
1.4. 2.5 Основы Git - Работа с удалёнными репозиториями
1.5. 4.2 Git на сервере - Настройка Git на сервере
1.6. 4.3 Git на сервере - Создание открытого SSH-ключа
2. Git и публикация сайта

О сайте