git post-receive hook, который подключается к удаленному через ssh и git pulls - PullRequest
0 голосов
/ 10 ноября 2011

просто пытаюсь написать свой 1-й git hook.У меня есть удаленный источник, и когда я нажимаю на него, я бы хотел, чтобы сработал хук post-receive, который запустит ssh в мой живой сервер и git pull.Можно ли это сделать, и это хороший подход?

Хорошо, у меня срабатывает ловушка, и живой сервер выполняет git pull, но говорит, что он уже обновлен?есть идеи?

Ответы [ 2 ]

4 голосов
/ 10 ноября 2011

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

На каждом сайте есть несколько сред (бета-версия, которая является «песочницей» для всех разработчиков), поэтапная подготовка, на которой мы демонстрируем изменения в владельцах контента, прежде чем начать работу, обучение, которое использует наш обучающий чувак для обучения новых менеджеров контента и вживую. где каждый идет, чтобы потреблять контент).

Мы контролируем развертывание во всех этих средах через перехваты после получения на основе имен веток. У нас может быть ветвь с «оперативным исправлением», которая нигде не разворачивается, но когда мы объединяем ее, например, с «бета» веткой, она автоматически развертывается на бета-сервере, чтобы мы могли проверить взаимодействие нашего кода с кодом других разработчиков.

Существует множество способов сделать это, и мы настраиваем ваши ssh-ключи, чтобы git-сервер мог подключиться к вашему веб-серверу и выполнить git pull. Это означает, что вы должны добавить открытый ключ для git @ gitserver в свой файл authorit_keys git @ webserver и наоборот, затем на хуке post-receive вы анализируете ветвь и пишете для нее оператор case, например, так:

    read line
    echo "$line" | . /usr/share/doc/git-core/contrib/hooks/post-receive-email
    BRANCH=`echo $line |  sed 's/.*\///g'`
    case $BRANCH in
        "beta" )
        ssh git@beta "cd /var/www/your-web-folder-here; git pull"
        ;;
    esac

Надеюсь, это поможет.

0 голосов
/ 10 ноября 2011

Это, конечно, можно сделать, но это не лучший подход.Когда вы используете git pull, git будет загружать, а затем сливаться с вашей рабочей копией.Если гарантировано, что это объединение всегда будет ускоренным, это может быть хорошо, но в противном случае вы можете столкнуться с конфликтами, которые необходимо разрешить в развернутом коде на вашем живом сервере, что, скорее всего, приведет к его поломке.Другая проблема с развертыванием с помощью pull заключается в том, что вы не можете просто вернуться к более раннему коммиту в истории, так как pull просто скажет вам, что ваша ветвь уже обновлена.

Более того, есливы работаете с не-пустым хранилищем на своем работающем сервере, вам нужно предпринять шаги, чтобы запретить общедоступность данных в вашем каталоге .git.

Аналогичный, но более безопасный подход заключается в развертываниичерез ловушку в пустом репозитории на живом сервере, который будет использовать git checkout -f, но с рабочим каталогом, установленным в каталог, в который должен быть развернут ваш код.Вы можете найти пошаговое руководство по настройке такой системы здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...