Развертывание сайта с помощью Git: хук после обновления работает сначала, а потом никогда - PullRequest
0 голосов
/ 25 февраля 2012

Возникла странная проблема с крючком git после обновления.Я создал репозиторий на своем сервере (/var/www/vhosts/git/master.git) и в этот репозиторий добавил хук пост-обновления со следующим кодом:

#!/bin/sh

echo $1
echo "*UPDATE*"

case " $1 " in
*'refs/heads/master'*)
    GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
    echo
    echo "Master was updated!"
    echo
    ;;
esac

case " $1 " in
*'refs/heads/sandbox'*)
GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
    echo
    echo "Sandbox was updated!"
    echo
    ;;
esac

Я убедился, что этот файл исполняемый.Затем я создал локальный репозиторий на своем компьютере, используя:

$ mkdir website && cd website
$ git init
$ echo 'Testing.' > index.html
$ git add index.html
$ git commit -q -m "Initial commit"
$ git remote add web ssh://username@website.com/var/www/vhosts/website.com/git/master.git
$ git push web +master:refs/heads/master

. По какой-то причине это первое нажатие работает просто отлично - /var/www/vhosts/website.com/sandbox.website.com обновляется с помощью файла индекса, но затем ни одно из следующих нажатий не работает.Я получаю ответ от хука post-update, который говорит: «Мастер обновлен!»но каталог на самом деле не обновляется.

Предложения?

1 Ответ

0 голосов
/ 31 октября 2012

У вас, похоже, есть проблема с разрешением.Посмотрите разрешения на пути /var/www/* и убедитесь, что у вашего пользователя git есть права на чтение / запись / удаление файлов.

Я использовал гораздо более простую технику 1005 * (вот подробный скрипт ), который позволил мне использовать мой сервер в качестве git-сервера с gitolite и развертывать на push безклонировать хранилище на пути /var/www/myproject.Это работает для меня на git 1.7.9 и Ubuntu 12.04.1 LTS с Apache/2.2.22.

  1. Создайте свое хранилище на сервере:

    mkdir myproject.git && cd myproject.git
    git init --bare
    
  2. Настройте репозиторий:

    git config core.worktree /var/www/myproject
    git config core.bare false
    git config receive.denycurrentbranch ignore
    
  3. Отредактируйте или создайте hooks/post-receive и сделайте его работоспособным

    touch hooks/post-receive
    chmod u+x hooks/post-receive
    

Вотсодержимое файла:

#!/bin/sh
git checkout -f

Вы готовы сделать push и заставить его работать.

Мой пользователь git называется git, а мой apache использовал пользователя ubuntu.Мне пришлось отредактировать конфигурацию apache на /etc/apache2/conf.d/security (вы также можете сделать это на /etc/apache2/http.conf), чтобы включить:

User git
Group git

Теперь мой /var/www/myproject развертывает все файлы на push, создавая файлы сgit:git пользователь / группа и мой apache для запуска используют одного и того же пользователя / группу.

Теперь вам просто нужно перезагрузить сервер или сделать service apache2 restart

...