Git - gancho pós-recebimento com git pull “Falha ao encontrar um diretório git válido”

17

É muito estranho, mas ao configurar um repositório git e criar um gancho pós-recebimento com:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

o hook roda de fato, mas nunca consegue executar git pull corretamente:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

então estou me perguntando agora, como é possível fazer o hook atualizar o clone com post-receive?

neste caso, o usuário que está executando os processos é o mesmo, e está tudo dentro da pasta do usuário, então eu realmente não entendo ... porque se eu for manualmente para

cd ~/websites/testing
git pull

funciona sem problema ...

qualquer ajuda seria muito apreciada

Muito obrigado

    
por zanona 29.01.2010 / 17:44

6 respostas

23

Enquanto o gancho estiver em execução, GIT_DIR e (se a área de trabalho foi definida explicitamente), GIT_WORK_TREE serão definidos. Isso significa que seu pull não será executado com o segundo repositório no diretório que você alterou.

Experimente git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull ; ou descompactar o ambiente repo-local com isto:

unset $(git rev-parse --local-env-vars)

Mais informações sobre essas variáveis de ambiente em man 1 git .

    
por 29.01.2010 / 22:35
6

Uma coisa que eu experimentei foi que usar o post-update hook '--git-dir' funcionou muito bem, mas o git ainda estava reclamando sobre uma árvore em funcionamento ausente (apesar de usar '--work-tree')

Em resumo, isso não funcionou:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

considerando que isso funcionou:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull

    
por 16.03.2010 / 15:25
1

Isso não funciona?

cd /home/smb/websites/testing
env -i git pull

Editado

Melhor ainda

cd /home/smb/websites/testing
unset GIT_DIR
git pull
    
por 20.04.2010 / 15:37
0

Já tentou com o caminho completo em vez do ~?

cd /home/smb/websites/testing
git pull
    
por 29.01.2010 / 20:20
0

O script provavelmente foi chamado com /bin/sh , que não entende ~ . Experimente com o caminho completo para ~ .

    
por 29.01.2010 / 22:02
0

A primeira resposta recomendada é a correta - quando um gancho está rodando o GIT_DIR etc. No entanto, se você quiser usar o script em outro repositório, esse método é defeituoso, pois ele codifica com firmeza a reinicialização do GIT_DIR. Como eles implicaram, a outra maneira é remover a variável usando env da seguinte forma: env -i git reset --hard Obviamente, o comando que você executa lá é com você - é apenas o bit 'env -i' que é o bit importante.

    
por 07.02.2010 / 09:18

Tags