Não é possível extrair do repositório Git por HTTP / HTTPS, mas pode com o SSH

1

Eu tenho um Debian rodando o Nginx em git.example.com que eu uso para armazenar repositórios git.

Eu posso puxar / empurrar / clonar via SSH executando git clone [email protected]/git/my_repo . ( git é um link simbólico no meu diretório pessoal que aponta para /mnt/primary_storage/git )

No entanto, quando clonei / puxo com HTTP (S), recebo o seguinte erro:

fatal: http://git.example.com/my_repo.git/info/refs not valid: is this a git repository?

Eu recebo este erro, independentemente de eu estar clonando um repositório real

A parte relevante da configuração do Nginx é:

server {
  listen       80;
  server_name  git.example.com;

  root /mnt/primary_storage/git;


  location ~ (/.*) {
    auth_basic "Login";
    auth_basic_user_file /mnt/primary_storage/.htpasswd;
    include       fastcgi_params;
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param SCRIPT_FILENAME     /usr/lib/git-core/git-http-backend;
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT    /mnt/primary_storage/git;
    fastcgi_param PATH_INFO           $1;
    fastcgi_pass localhost:9000;
  }   
}

A coisa chata é que eu tive exatamente a mesma configuração rodando em outro servidor que tinha Ubuntu e funcionava bem. Então eu não sei o que está causando isso. Além deste problema, tudo no servidor está funcionando bem.

Sim, há algumas perguntas semelhantes como esta nos sites do StackExchange, mas nenhuma delas está me ajudando. Por exemplo, alguns deles estão lidando com o Github e eles não configuraram o repositório primeiro. Outros tinham o endereço do Git errado. E outros disseram que eu deveria executar git config --global http.proxy , o que não ajudou.

Além disso, verifiquei todas as permissões de pasta / arquivo e elas são todas legíveis e graváveis pelo usuário do Nginx.

    
por KNejad 25.10.2017 / 10:41

3 respostas

1

A fim de puxar corretamente o HTTP (ou qualquer outro protocolo que suporte a embalagem), você precisa fazer a embalagem manualmente.

Você pode fazer isso executando git update-server-info enquanto estiver no diretório do repositório.

Pode ser útil colocar isso no gancho post-update Git no repo, então é feito automaticamente quando você pressiona.

mtak@gen1:/srv/git/puppet.git/hooks$ cat post-update 
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

exec git update-server-info
    
por 26.10.2017 / 11:19
1

Esta mensagem de erro é a mesma que dizer "O repositório não existe".

Verifique se o URL que você está usando é exibido em Buscar e enviar push para o comando:

git remote show origin

Isso deve dar um resultado como [email protected]:[REPO-NAME].git .

Se o URL estiver errado, você pode corrigi-lo pelo comando:

git remote set-url origin [REPO-URL]
    
por 16.11.2017 / 15:38
0

Verifique se o repositório do git que você está tentando acessar suporta o protocolo HTTPS?

Observe também que o nome do repositório faz distinção entre maiúsculas e minúsculas.

Além disso, verifique se a URL do repositório está acessível na sua rede. Talvez exista o problema da porta 443 (https).

Verifique se o proxy está configurado corretamente para o git se você estiver atrás de um proxy!

git config --global http.proxy

Veja também as informações aqui: link

Espero que isso ajude.

    
por 21.11.2017 / 11:04