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


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).


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

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.


1

Você pode tentar isso:

git fetch --update-shallow

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

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.