post-receive: Nenhum arquivo ou diretório

2

Estou recebendo um erro ao tentar enviar para uma instância remota do Amazon EC2 (Ubuntu Linux). Eu dei a todos os diretórios e arquivos relacionados permissões completas. Estou tentando usar um gancho de pós-recebimento para mover o projeto para meu diretório de produção em /var/www/myapp :

$ git push prod-server master

Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 292 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: error: cannot run hooks/post-receive: No such file or directory
To prod-server:/home/ubuntu/myapp/myapp.git
   8944048..a445d1d  master -> master

Meu arquivo de pós-recebimento (localizado no repositório bare: /home/ubuntu/myapp/myapp.git/hooks/ ):

#!/bin/bash
while read oldrev newrev ref
do
  branch='echo $ref | cut -d/ -f3'
  if [ "prod-server" == "$branch" -o "master" == "$branch" ]; then
    git --work-tree=/var/www/myapp/ checkout -f $branch
    echo 'Changes pushed to Amazon EC2 PROD-SERVER directory!'
  fi
  if [ "test" == "$branch" ]; then
    git --work-tree=/var/www/myapp/test/ checkout -f $branch
    echo 'Changes pushed to Amazon EC2 PROD-SERVER test directory!'
  fi
done
    
por TheNally 21.09.2014 / 03:20

1 resposta

0

Parece que o problema é que o script post-receive não está no lugar certo. Qual é a saída de git remote -v no repositório local e ls -l /home/ubuntu/myapp/myapp.git/hooks no servidor?

Algumas dicas para o script em si:

  • Use mais cotações ™
  • Bash (e shells POSIX) usam um único sinal de igual para [
  • -o é reprovado ; você deve usar [ foo = bar ] || [ baz = ban ]
  • Use set -o errexit para sair do script no primeiro erro; deve tornar a depuração muito mais fácil
  • Use set -o xtrace e exec > /tmp/post-receive.log 2>&1 para (temporariamente) obter um log de depuração do que o script faz.
por l0b0 21.09.2014 / 11:11