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