Após clonar um repositório remoto, ele não mostra nenhuma ramificação remota pela opção -a. Qual pode ser o problema? Como depurar isso? Neste snippet, dois ramos remotos não são mostrados:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git --version
git version 1.8.3.1
Tentei o mesmo comando em outra máquina, funciona bem:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
$ git --version
git version 1.7.1
Também tentei clonar outro repo, funciona bem. Embora eu possa tentar nesta máquina novamente, mas seria melhor saber o que está errado.
Todas as sugestões ou dicas serão mais que bem-vindas.
Edit: Resumo da resposta: desde a versão 1.8.3.2 do git, o "--depth" e "--no-single-branch" precisam ser usados juntos para obter o mesmo comportamento de antes. Isso é considerado uma correção de bug.
git
branch
shallow-clone
minghua
fonte
fonte
master
é a sua filial local.remotes/origin/master
é a ramificação remota correspondente. Qual é exatamente a pergunta?git branch -avv
git clone --depth=1 --no-single-branch
, é disso que preciso na maioria dos casos.Respostas:
O comportamento está correto, após a última revisão, o branch master é (uma vez que este é o HEAD do remoto primário) o único branch remoto no repositório:
O clone completo oferece novas (todas) ramificações:
Clones rasos
Devido à descrição superficial na documentação técnica, um "
git-clone --depth 20 repo
[...] resultado [s em] cadeias de commit com um comprimento de no máximo 20." Um clone raso, portanto, deve conter a profundidade solicitada de commits, da ponta de um galho.As - além - a documentação de
git clone
para o--single-branch
-option descreve:Portanto, um clone raso ( com a opção de profundidade ) busca apenas um único ramo (na profundidade solicitada).
Infelizmente, ambas as opções (
--depth
e--single-branch
) apresentaram falhas no passado e o uso de clones superficiais implica em problemas não resolvidos (como você pode ler no link que postei acima), que é causado pela reescrita de histórico fornecida. Em geral, isso leva a um comportamento um tanto complicado em casos especiais.fonte
fetch = +refs/heads/*:refs/remotes/origin/*
, e executandogit fetch --depth 1
(sem--tags
). Também podemos adicionar tags específicas a serem buscadas, usando como configuraçãofetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
.Depois de fazer um clone superficial, para poder verificar outras filiais remotamente ,
Executar (obrigado @jthill):
Depois disso, faça um
git fetch -v
Finalmente
git checkout the-branch-i-ve-been-looking-for
A etapa 1 também pode ser feita manualmente por edição
.git/config
.Por exemplo, altere a seguinte linha de:
para (substituir
master
por*
):fonte
git remote set-branches origin '*'
para todos os ramos, substitua o*
por um nome de ramo para um.-vvv
significa emgit fetch -vvv
? Não encontrei nenhuma informação sobre isso no documento git-fetchverbosity
oudebug
degit
. Não é dofetch
método.Ao ler as respostas e o comentário de @jthill, o que funcionou melhor para mim foi usar a
set-branches
opção nogit remote
comando:Isso muda a lista de branches rastreados pelo remoto nomeado para que possamos buscar e fazer checkout apenas do branch necessário.
fonte
git remote set-branches --add origin 'remote_branch_name'
forma que o novo branch seja adicional aos existentes, ao invés de substituí-los na lista remota de branches (ou padrões de branch) para buscar no arquivo .git / config.'
é importante nogit remote set-branches --add origin 'remote_branch_name'