Git: qual é o controle remoto padrão configurado para ramificação?

192

Eu tenho um repositório bare remoto hub. Eu trabalho apenas no masterramo. A última frase desta mensagem de erro abaixo me faz pensar: Como descobrir qual é o "controle remoto padrão configurado para sua filial atual" ? E como faço para configurá-lo?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
leonbloy
fonte

Respostas:

230

Rastrear a filial remota

Você pode especificar o repositório remoto padrão para empurrar e puxar usando a opção de trilha do git-branch. Você normalmente faria isso especificando a opção --track ao criar sua ramificação principal local, mas como ela já existe, atualizaremos a configuração manualmente da seguinte maneira:

Edite seu .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

Agora você pode simplesmente git push e git pull.

[ fonte ]

scragz
fonte
Isso também não seria definido se o OP o fizesse git pull hub master?
Ryan Bigg
@ Ryan Bigg: Não automaticamente, ou você sempre estragaria sua configuração.
cutuca
36
Por que editar um arquivo de configuração quando existem comandos git por esse motivo?
urschrei
43
git branch local_branch --set-a montante remoto / remote_branch (ou quando empurrando, como detalhado abaixo)
urschrei
25
@scragz: De jeito nenhum! a abordagem de comando garante que seu .gitconfig seja deixado em um estado significativo.
SMCI
260

Você pode fazê-lo de maneira mais simples, garantindo que você .gitconfigfique em um estado significativo:

Usando o Git versão v1.8.0 e superior

git push -u hub master ao empurrar, ou:
git branch -u hub/master

OU

(Isso configurará o controle remoto para a filial com check-out atualmentehub/master )
git branch --set-upstream-to hub/master

OU

(Isso configurará o controle remoto para a ramificação nomeada branch_namecomo hub/master)
git branch branch_name --set-upstream-to hub/master

Se você estiver usando v1.7.xou mais cedo

você deve usar --set-upstream:
git branch --set-upstream master hub/master

Urschrei
fonte
3
Para quem se perguntando: o segundo comando pode ser usado para ramos existentes
Eric Hu
1
@ eric-hu conforme detalhado na minha resposta aqui: stackoverflow.com/questions/4878249/...
urschrei
1
O set-upstream[-to]comando altera o controle remoto atualmente configurado. O pôster original perguntou sobre o controle remoto configurado padrão . Certamente esse não é o mesmo conceito?
Steve jarros
1
Cada filial possui um controle remoto configurado no momento , especificando qual filial nesse controle remoto corresponde à filial local. O controle remoto configurado padrão determina qual ramificação é empurrada ou puxada se você não especificar uma explicitamente. Esta resposta define apenas a atual . A resposta aceita (edição manual) também permite definir a resposta padrão . Alguém conhece um comando que evita a edição manual?
precisa
1
--set-upstream-tofez exatamente as mesmas alterações .git/configsugeridas por @scragz em sua resposta .
Strah
-1

o comando para obter o push remoto eficaz para a ramificação, por exemplo, master, é:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

Aqui está o porquê (da saída "man git config"):

branch.name.remote [...] informa ao git fetch e git push que controle remoto buscar de / push para [...] [for push] pode ser substituído por remote.pushDefault (para todos os ramos) [e] para o ramificação atual [..] substituída ainda por branch.name.pushRemote [...]

Por alguma razão, "man git push" fala apenas sobre branch.name.remote (mesmo que tenha a menor precedência dos três) + afirma erroneamente que, se não estiver definido, envie os padrões para a origem - não, é apenas quando você clona um repo, o branch.name.remote está definido como origem, mas se você remover essa configuração, o git push falhará, mesmo que você ainda tenha a origem remota

darkdiatel
fonte
Esta pergunta já foi respondida com uma resposta mais útil.
Austin Schäfer