Ответы пользователя по тегу Git
  • Git: как организовать работу нескольких разработчиков с одним репозиторием?

    @kaasius
    День добрый.
    Ответ на первый вопрос - нет, вы понимаете неправильно, можно сделать все красиво.
    Ответ на второй вопрос вытекает из первого - вам не надо программировать без веток.
    Сразу отвечая на третий вопрос - возможно настроить различные доступы на различные ветки, сповесить на это все автотесты, деплой на боевой сервер при пуше в ветку release, а на тестовый сервер - при пуше в ветку test.

    Заранее отвечая на вопрос "как", скажу слова gitolite, хуки, bare репы, etc. Но если у вас серьезный бизнес - может вам просто нужен аутсорс админ, чтобы это все настроить? Тогда просто свяжитесь со мной, я вам с этим помогу.
    Ответ написан
    Комментировать
  • Как раздавать права на директорию для автоматического деплоя из git?

    @kaasius
    1. Файлы в рабочем каталоге сайта не должны принадлежать www-data, кроме тех, которые записывает сам сервер. Иначе вы получите дополнительную уязвимость.
    2. Лучше не держать в doc-root .git - в какой-то момент вы забудете закрыть доступ к этой папочке, и… весь ваш код окажется у хакеров.

    Поэтому на сервере с центральным репозиторием (куда вы делаете пуш) делаете еще один репозиторий, откуда вы по хуку делаете пулл. А на боевой сервер отправляете все с помощью rsync или например dklab realsync (который использует тот же rsync, но в автоматическом режиме следит за изменениями в папке и сразу же их синкает на второй сервер).

    Ну и владельца лучше поставить какого-нибудь отличного от www-data
    Ответ написан
  • Как написать хук для апдейта git репозитория после добавления на него файлов?

    @kaasius
    Вам хочется странного. Такого хука нет, потому что это не хук. Можете конечно написать скрипт типа
    cd /work/dir
    git add -A
    git commit -m "automatic commit"
    git push origin master

    и положить в cron.

    Но это подводные грабли - в какой-то момент случится конфликт, и вся автоматика накроется.
    Ответ написан
    1 комментарий
  • Как организовать синхронизацию сайта с bare-репозиторием на сервере?

    @kaasius
    Только не пушит, а переходит в нужный каталог и делает оттуда pull.

    Например так:
    branch=$(git rev-parse --symbolic --abbrev-ref $1)
    if [ $(git rev-parse --is-bare-repository) = true ]
    then
        rep=$(basename "$PWD"|sed 's/.git//')
    else
        rep=$(basename $(readlink -nf "$PWD"/..|sed 's/.git//'))
    fi
    
    /home/scripts/git/post-update.sh $rep $branch


    И в post-update.sh например так:
    #!/bin/sh
    DATADIR=/var/www/$1/$2
    REPO=$1
    BRANCH=$2
    
    if [ ! -d $DATADIR ]
    then
        mkdir -p $DATADIR
        git clone gituser@example.com:$REPO $DATADIR
        cd $DATADIR
        git checkout $BRANCH
    else
        cd $DATADIR
        /usr/bin/git config user.email "deploy@local"
        /usr/bin/git config user.name "Deploy Robot"
        /usr/bin/git fetch origin
        /usr/bin/git reset --hard origin/$BRANCH
        /usr/bin/git stash
        /usr/bin/git checkout
        /usr/bin/git pull    
    fi


    Ну, можно еще сверху навернуть создание виртуалхостов в апаче, или удаление удаляемых веток.
    Ответ написан
    3 комментария
  • Git для бэкапа бинарных файлов?

    @kaasius

    По шагам.

    1. Делаете чистый репозиторий

    2. Делаете ветки для старых годов (git checkout -b 2011)

    3. Сохраняете там прежние годы (git add -A && git commit)

    4. Возвращаетесь в ветку master (она остается пустой)

    5. Делаете следующую ветку (git checkout -b 2012)

    6. Повторяем пункт 3

    Алсо, во избежание, можно сразу сделать веточку empty, чтобы случайный мердж в master не заставил вас потом делать откаты.

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

    Ответ написан
    4 комментария