26 Ноябрь, 2015

CentOS 6 - обновить git

В репозиториях CentOS 6 лежит уже довольно старая версия пакета git-1.7.1-3 Все бы с ним хорошо, да есть один баг из-за которого в нем не работает хук из вот этой заметки: http://mrdeveloper.ru/post-36/git-deploy-hooks

Он ругается вот так:

remote: fatal: /usr/libexec/git-core/git-pull cannot be used without a working tree.

Ну что же, настало время исправить эту ополошность. Обновим git из репозитория GitLab.

wget -O /etc/yum.repos.d/PUIAS_6_computational.repo https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/install/centos/PUIAS_6_computational.repo

wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-puias http://springdale.math.ias.edu/data/puias/6/x86_64/os/RPM-GPG-KEY-puias

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-puias

rpm -qa gpg*

yum repolist

yum --enablerepo=PUIAS_6_computational install git

git --version

В итоге получаем вполне рабочий git 1.8.3.1

18 Август, 2014

Простой деплой веб-приложения при помощи Git

В далекие времена все изменения на сайтах долго закачивались на сервер по FTP и это было жутко медленно. Потом люди стали заливать на сервера изменения уже в виде архивов которые стало возможным разворачивать из панели управления хостингом либо же зайдя по ssh. Сейчас же очень удобно разрабатывать веб-приложения на локальной машине и деплоить их на удаленный сервер одной простой командой - git push. Чуть ниже пошаговая инструкция по настройке сервера для автоматического деплоя по срабатыванию хука post-receive. Означения: ЛМ - локальная машина и УС - удаленный сервер.

Тут все тоже распишу по шагам:

  1. На локальной машине (ЛМ) инициализируем репозиторий - git init

  2. На сервере (УС) создаем bare-репозиторий - git --bare init

  3. (ЛМ) добавляем адрес удаленного репозитория - git remote add production user@ip:/dir/git/reponame/

  4. (ЛМ) Делаем изменения в проекте и коммитим их - git add -A и git commit -m "commit comment"

  5. (ЛМ) Создаем новую ветку под названием production - git checkout -b production

Вдальнейшем на сервере будут деплоиться изменения только из этой ветки. В ней мы не работаем! Туда только мержим из других веток тогда когда все готово!

  1. (ЛМ) Сливаем изменения в ветку production и отправляем изменения на сервер - git push -u production

  2. (УС) На сервере переходим в директорию с сайтом - cd ~/website/

Именно туда мы будем деплоить изменения из продакшн-ветки

  1. (УС) Клонируем репозиторий указав конкретную ветку - git clone -b production /dir/git/reponame

  2. (УС) Создаем хук в bare-репозитории - vim /dir/git/reponame/hooks/post-receive

Содержание:

#!/bin/sh
git --git-dir ~/website/.git --work-tree ~/website/ pull
  1. (УС) Делаем файл исполняемым - chmod +x /dir/git/reponame/hooks/post-receive

  2. (ЛМ) Пробуем делать изменения в файлах и пушим их на сервер - git push production production

Наблюдаем нет ли в выводе команды строчек с fatal error. Если нету то все ок.

  1. (УС) Проверяем - в ~/website/ должны отразиться свежие изменения

Если их нет то пробуем запустить хук вручную - /dir/git/reponame/hooks/post-receive

Вот и все. Ничего сложного =)

Home