Comportamento por omissão do 'git pull'
porque é que {[[0]} puxa tudo, incluindo os ramos remotos recentemente criados, mas git pull origin master
não puxa?
estou a usar git version 2.9.3.windows.2
.
3 answers
Quando indicar sem ramificações, são usadas as opções predefinidas. O valor por omissão significa obter e actualizar todas as ramificações existentes no repositório remoto.
Ver documentação para mais pormenores:
git pull [options] [<repository> [<refspec>…]]
<refspec>
indica quais os refs a obter e quais os refs locais a actualizar. Quando não aparecem<refspec>
s na linha de comandos, os refs a obter são lidos a partir das variáveisremote.<repository>.fetch
em vez disso (ver git-fetch[1]).
A documentação referenciada explica:
Você interage frequentemente com o mesmo repositório remoto, obtendo-o regularmente e repetidamente. Para poder acompanhar o progresso desse repositório remoto, o git fetch permite-lhe configurar as variáveis de configuração
remote.<repository>.fetch
.Tipicamente uma variável como esta pode parecer:
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/*
O exemplo acima irá buscar todos os ramos que existem no
origin
(isto é, qualquer ref que corresponda ao lado esquerdo do valor,refs/heads/*
) e actualize os ramos de localização remota correspondentes na hierarquiarefs/remotes/origin/*
.
O comportamento é predefinido porque lhe permite sincronizar todos os repositórios de uma vez. Se não quiser actualizar todas as ramificações locais de uma vez, use git fetch
para sincronizar os repositórios e git merge origin/<branch>
para actualizar cada ramificação local.
Em linguagem leiga, git pull
obtém tudo do seu Remoto (todos os novos ramos e actualiza os antigos ramos) e, por omissão, fá-lo-á para origin
. Se você tiver algum outro remoto como upstream
você tem que especificar isso como git pull upstream
e ele irá atualizar tudo a partir do upstream.
.git
. Você pode ir para a pasta .git/logs/refs/remotes/origin/
você verá os ramos tudo o que você tem em seu local.
Então, agora escrevi do meu cmd.
O que acontece por trás da cortina é independentemente dos ramos locais que você tem. Ele prende a origem e obter cada de lá para o seu local.
Mas, quando eu digito git pull origin master
. Neste você dá uma especificação de caminho de origem você precisa de um último chefe do ramo mestre. Então só o mestre brach é puxado e refrescado como está à distância.
Assim, origin master
é um Spec de caminho que eles chamaram em linguagem git para caminho.