O que significa a mensagem de erro git "Servidor não permite solicitação de objeto não anunciado"?

16

Estou tentando fazer um checkout no github e recebi esta mensagem de erro:

[user@arch ~]$ git clone --recursive https://github.com/simsong/tcpflow.git
Cloning into 'tcpflow'...
The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
remote: Counting objects: 4190, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 4190 (delta 21), reused 29 (delta 12), pack-reused 4146
Receiving objects: 100% (4190/4190), 50.27 MiB | 2.21 MiB/s, done.
Resolving deltas: 100% (2954/2954), done.
Submodule 'src/be13_api' (https://github.com/simsong/be13_api.git) registered for path 'src/be13_api'
Submodule 'src/dfxml' (https://github.com/simsong/dfxml.git) registered for path 'src/dfxml'
Submodule 'src/http-parser' (https://github.com/nodejs/http-parser.git) registered for path 'src/http-parser'
Cloning into '/home/user/tcpflow/src/be13_api'...
remote: Counting objects: 1203, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 1203 (delta 2), reused 5 (delta 1), pack-reused 1194
Receiving objects: 100% (1203/1203), 477.47 KiB | 1.96 MiB/s, done.
Resolving deltas: 100% (821/821), done.
Cloning into '/home/user/tcpflow/src/dfxml'...
remote: Counting objects: 1929, done.
remote: Total 1929 (delta 0), reused 0 (delta 0), pack-reused 1929
Receiving objects: 100% (1929/1929), 572.09 KiB | 2.89 MiB/s, done.
Resolving deltas: 100% (1294/1294), done.
Cloning into '/home/user/tcpflow/src/http-parser'...
remote: Counting objects: 1487, done.
remote: Total 1487 (delta 0), reused 0 (delta 0), pack-reused 1487
Receiving objects: 100% (1487/1487), 667.24 KiB | 2.46 MiB/s, done.
Resolving deltas: 100% (916/916), done.
Submodule path 'src/be13_api': checked out 'c81521d768bb78499c069fcd7c47adc8eee0350c'
Submodule path 'src/dfxml': checked out 'c31224626cf5f6678d42cbcfbfcd4e6191c9a864'
error: Server does not allow request for unadvertised object 5bbcdc5df9d01b521e8da011bab0da70bdec3653
Fetched in submodule path 'src/http-parser', but it did not contain 5bbcdc5df9d01b521e8da011bab0da70bdec3653. Direct fetching of that commit failed.
[user@arch ~]$

Então eu sou o mantenedor desses repositórios. O src / http-parser é uma bifurcação de outro repositório, e os mantenedores desse repositório não aceitaram consistentemente meus pedidos pull (sem nenhum motivo) para adicionar alguns arquivos gerados automaticamente ao arquivo .gitignore . Mas eu não acho que essa é a questão aqui.

    
por vy32 12.08.2017 / 14:35

1 resposta

4

jgit - O que é o refs anunciado do git? - estouro de pilha :

During a fetch, the server can list references that it has and that the client may wish to fetch. These are the advertised references.

  • Parece que você não pode receber diretamente nenhuma confirmação específica do servidor, apenas refs (ou seja, ramificações e tags). Ou melhor, que os servidores do Github são configurados para não permitir tais solicitações.
  • Então, se você deseja obter um commit específico com --depth , ele deve estar no máximo em <depth>-1 commits do ref buscado (que é o branch / tag especificado nos metadados do submódulo)

    Normalmente, o pessoal aconselha a definir apenas depth para um número razoavelmente grande, mas ainda muito menor que o número total de confirmações no repositório - como 50 ou 100 . Por exemplo. 50 é o que o Travis usa ao fazer o clone inicial do projeto.

Se você não estiver atualizando o submódulo com --depth , não conseguir encontrar o commit significaria qualquer um:

  • a árvore do submódulo está no estado "superficial" e o acima se aplica (possível somente quando foi atualizado anteriormente com --depth ou sua entrada em .gitmodules tem shallow = true )
  • o commit não está na ramificação que o submódulo está usando
  • o commit não está no repositório do submódulo:
    • ou alguém cometeu um erro,
    • ou já esteve lá, mas foi excluído por um push forçado

Para o registro, no seu caso específico, foi o último caso: commit 5bbcdc5df9d01b521e8da011bab0da70bdec3653 não está no https://github.com/simsong/http-parser.git repo.

    
por 17.01.2018 / 21:21

Tags