Eu tenho um gancho de pós-recebimento que é executado em um repositório git central configurado com o gitolite para acionar um git pull em um servidor de armazenamento temporário. Parece funcionar corretamente, mas lança um erro "comando não encontrado" quando é executado. Estou tentando rastrear a origem do erro, mas não tive sorte. Executar os mesmos comandos manualmente não produz um erro.
O erro muda dependendo do que foi feito no commit que está sendo enviado para o repositório central. Por exemplo, se 'git rm' foi confirmado e enviado para o repositório central, a mensagem de erro será "remote: hooks / post-receive: linha 16: Removido: comando não encontrado" e se 'git add' foi confirmado e enviado para o repo central da mensagem de erro será "remote: hooks / post-receive: linha 16: Merge: comando not found". Em ambos os casos, a execução do 'git pull' no servidor de teste funciona corretamente, apesar da mensagem de erro.
Aqui está o script de pós-recebimento:
#!/bin/bash
#
# This script is triggered by a push to the local git repository. It will
# ssh into a remote server and perform a git pull.
#
# The SSH_USER must be able to log into the remote server with a
# passphrase-less SSH key *AND* be able to do a git pull without a passphrase.
#
# The command to actually perform the pull request on the remost server comes
# from the ~/.ssh/authorized_keys file on the REMOTE_HOST and is triggered
# by the ssh login.
SSH_USER="remoteuser"
REMOTE_HOST="staging.server.com"
'ssh $SSH_USER@$REMOTE_HOST' # This is line 16
echo "Done!"
O comando que faz o git pull no servidor intermediário está no arquivo ~ / .ssh / authorized_keys do usuário ssh e é:
command="cd /var/www/staging_site; git pull",no-port-forwarding,no-X11-forwarding,no-agent-forwarding, ssh-rsa AAAAB3NzaC1yc2EAAAABIwAA... (the rest of the public key)
Esta é a saída real da remoção de um arquivo do repositório local, comprometendo-o localmente e enviando-o para o repositório central do git:
ben@tamarack:~/thejibe/testing/web$ git rm ./testing
rm 'testing'
ben@tamarack:~/thejibe/testing/web$ git commit -a -m "Remove testing file"
[master bb96e13] Remove testing file
1 files changed, 0 insertions(+), 5 deletions(-)
delete mode 100644 testing
ben@tamarack:~/thejibe/testing/web$ git push
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 221 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: From [email protected]:testing
remote: aa72ad9..bb96e13 master -> origin/master
remote: hooks/post-receive: line 16: Removed: command not found # The error msg
remote: Done!
To [email protected]:testing
aa72ad9..bb96e13 master -> master
ben@tamarack:~/thejibe/testing/web$
Como você pode ver o script de pós-recebimento chega à linha echo "Done!"
e quando olho no servidor de teste, o git pull
foi executado com êxito, mas ainda há essa mensagem de erro irritante.
Qualquer sugestão sobre onde procurar a origem da mensagem de erro seria muito apreciada. Estou tentado a redirecionar o stderr para / dev / null, mas prefiro saber qual é o problema.