Журналы git не совпадают при настройке --work-tree с хуком push-to-deploy post-receive

Я настроил push-to-deploy на своем производственном сервере, настроив каталог --bare в /home/ubuntu/push-to-deploy/test.git, используя его в качестве удаленного и добавив hooks/post-receive внутри --bare, выглядя так:

#!/bin/bash

while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`
  if [ "production" == "$branch" -o "master" == "$branch" ]; then

    git --work-tree=/var/www/test/ checkout -f $branch
    sudo chown -R ubuntu:www-data /var/www/test

    echo 'Changes pushed to Amazon EC2 PROD.'
  fi
done

Это отлично работает при нажатии на этот новый пульт с моего локального хоста. Сценарий post-receive выполняется так, как должен, и обновления содержимого отражаются в каталоге /var/www/test, как и должно быть. Единственное, мой git log внутри /var/www/test вообще не соответствует моему локальному хосту. Это нормальное поведение --work-tree? Если да, то что я могу сделать, чтобы сохранить эту функциональность push-to-deploy и по-прежнему копировать мой журнал git в рабочий каталог, а также содержимое?

Также

Когда мой контент копируется в производственный каталог (/var/www/test), все права собственности на файлы переопределяются на ubuntu:ubuntu, что делает www-data неспособным выполнять свою работу. Я поместил строку в свой post-receive для обновления права собственности после каждого получения, но есть ли другой способ (лучший способ) сделать это?

ОБНОВЛЕНИЕ

Способ гарантировать, что www-data будет сохранен как группа, состоит в том, чтобы установить guid каталога следующим образом:

chmod -R g+s /var/www/test

Это установит его в любую текущую группу каталога, поэтому, если вы хотите, чтобы это было www-data, убедитесь, что вы установили группу в www-data, прежде чем вводить эту команду.

Спасибо


person sadmicrowave    schedule 13.04.2014    source источник
comment
git log --git-dir=/home/ubuntu/push-to-deploy/test.git должен работать нормально при выполнении из /var/www/test.   -  person VonC    schedule 14.04.2014
comment
фатальный: нераспознанный аргумент: --git-dir=/home/ubuntu/push-to-deploy/test.git   -  person sadmicrowave    schedule 14.04.2014
comment
Извините, я имел в виду git --git-dir=/home/ubuntu/push-to-deploy/test.git log   -  person VonC    schedule 14.04.2014
comment
Кроме того, должен ли я затем добавить параметр в /var/www/test/.git/config, чтобы изменить git-dir на /home/ubuntu/push-to-deploy/test.git, чтобы мне не нужно было указывать этот параметр --git-dir для каждой такой команды?   -  person sadmicrowave    schedule 14.04.2014
comment
Я предлагаю в своем ответе установить переменную окружения GIT_DIR.   -  person VonC    schedule 14.04.2014
comment
Обратите внимание, что просто разделить имя ссылки на cut -d/ не совсем правильно: если есть ссылка формы refs/tags/master/v2, например, cut извлечет поле 3, которое будет master. Вероятно, в данном конкретном случае это нормально, но в целом вам следует просто протестировать, например, "$ref" == refs/heads/master.   -  person torek    schedule 14.04.2014


Ответы (1)


Вы можете установить переменную среды GIT_DIR в /home/ubuntu/push-to-deploy/test.git и:

  • сделай свое git --work-tree=/var/www/test/ checkout -f $branch
  • или сделай git log в /var/www/test/

В обоих случаях будет учитываться правильный индекс.


OP sadmicrowave подтверждает в комментариях:

только что сделал chmod -R g+s /var/www/test и теперь все работает.

person VonC    schedule 13.04.2014
comment
похоже, что в этом случае это сработает, но что, если бы на моем рабочем сервере было более одного репозитория git? - person sadmicrowave; 14.04.2014
comment
@sadmicrowave, тогда вам нужен скрипт/оболочка, которая инкапсулирует команды git, которые вы хотите запустить, при установке GIT_DIR в правильное репо. - person VonC; 14.04.2014
comment
какие-нибудь рекомендации для второй части моей операции? - person sadmicrowave; 14.04.2014
comment
nvm - только что сделал chmod -R g+s /var/www/test и теперь работает - person sadmicrowave; 14.04.2014