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


17

É muito estranho, mas ao definir 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 rodar o 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 gancho atualizar o clone com o pós-recebimento?

nesse caso, o usuário executando os processos é o mesmo, e tudo está 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 nenhum problema ...

qualquer ajuda sobre isso seria muito apreciada

Muito obrigado

Respostas:


25

Enquanto o gancho estiver em execução, GIT_DIRe (se a árvore de trabalho foi definida explicitamente) GIT_WORK_TREEestiver definido. Isso significa que seu pull não será executado com o segundo repositório no diretório para o qual você mudou.

Tente git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; ou desabilite o ambiente repo-local do git com isso:

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

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


1
Muito obrigado por Tobu, ele realmente funciona, vou verificar mais informações sobre isso também. Cheers
zanona

6

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

Em suma, 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


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

0

Você já tentou com o caminho completo em vez do ~?

cd /home/smb/websites/testing
git pull

0

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


0

A primeira resposta recomendada está correta - quando um gancho está executando o GIT_DIR, etc. No entanto, se você deseja usar o script em outro repositório, esse método é defeituoso porque codifica a redefinição do GIT_DIR. Como eles sugeriram, a outra maneira é remover a variável usando env da seguinte maneira: env -i git reset --hard Obviamente, qual comando você executa depende de você - é apenas o bit 'env -i' que é o mais importante .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.