Como converter um clone superficial do Git em um clone completo?

213

Acompanhamento desta pergunta: se eu tenho um clone superficial, como buscar todos os commits mais antigos para torná-lo um clone completo?

Mot
fonte
4
Você considera marcar a resposta de @ sdram? Essa é a correta.
Jonic Biz 13/07

Respostas:

92

EDIT: git fetch --unshallow agora é uma opção (obrigado Jack O'Connor).

Você pode executar git fetch --depth=1000000(supondo que o repositório tenha menos de um milhão de confirmações).

svick
fonte
237
Agora que git fetch --unshallowexiste (como na resposta do @ sdram), essa resposta não é mais a melhor.
Jack O'Connor
1
A resposta do @ sdram não funcionou para mim (versão 2.1.1 do git), mas essa resposta funcionou.
Kay - SE is evil
2
Nenhuma resposta funcionou para mim. Ambos os comandos conseguiu buscar todos os commits falta, mas quando eu tentar empurrar novos commits, eu recebo um erro sobre o servidor não saber sobre refs 'superficial'
Tyguy7
3
git fetch --depth=2147483647é a maior profundidade possível para fornecer ao comando.
clacke
5
Eu usei git fetch --unshallow, mas ainda não mostra todos os galhos.
Sid
674

O comando abaixo (git versão 1.8.3) converterá o clone raso em normal

git fetch --unshallow

Então, para ter acesso a todas as filiais na origem (obrigado @ Peter nos comentários)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Ramkumar D
fonte
36
Isso não desfaz o efeito colateral - único ramo. Para fazer isso, edite .git / config e altere buscar = + refs / heads / BRANCHNAME: refs / remotes / origin / BRANCHNAME para buscar = + refs / heads / *: refs / remotes / origem / *
Peter Cordes
3
Isso não cria ramificações locais que rastreiam as ramificações remotas; portanto, você ainda precisa fazer o checkout -b BRNAME origin / BRNAME para configurar isso.
Peter Cordes
25
Veja também stackoverflow.com/questions/17714159/... : git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin a partir de uma resposta não deve ser o mesmo que editting .git / config com a mão
Peter Cordes
Isso só funciona se o repositório estiver marcado como raso. Não me lembro como, mas há situações em que você pode acabar com um repositório incompleto sem ter feito explicitamente um clone superficial. @ do svick stackoverflow.com/a/6802238/260122 é a resposta que funciona cada vez.
clacke
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'trabalhou para mim
gzaripov
19

Eu precisava aprofundar um repositório apenas para um commit específico.

Depois de ler man git-fetch, descobri que não se pode especificar um commit, mas pode especificar uma data:

git fetch --shallow-since=15/11/2012

Para aqueles que precisam de aprofundamento incremental, outra mancitação:

--deepen=<depth>

Semelhante a --thpth, exceto que especifica o número de confirmações do limite superficial atual em vez da ponta de cada histórico de ramificação remota.

Victor Sergienko
fonte
1

Você pode tentar isso:

git fetch --update-shallow
Altynai
fonte
0

Nenhuma das mensagens acima fez o truque. Estou tentando trabalhar com tags git a partir de um clone superficial.

Primeiro eu tentei

git fetch --update-shallow

que meio que trabalhou no meio. No entanto, nenhuma tag disponível!

git fetch --depth=1000000

Este último comando realmente buscou as tags e finalmente pude executar

git checkout -b master-v1.1.0 tags/v1.1.0

e acabar com isso.

HTH

Gen.Stack
fonte