Como eu configuro a ramificação upstream para empurrar uma ramificação local no magit?

11

Pelo que me lembro, se estou trabalhando em uma ramificação, por exemplo, my-feature-brancheu costumava fazer isso no magit-statusmenu e P P, em seguida, selecionava a ramificação remota em uma lista que tinha origin/my-feature-branchno topo. Isso funcionou lindamente.

Recentemente, a partir desta discussão , eu poderia fazer algo semelhante com P -u e(abrir magit-push-popup, definir a --set-upstreambandeira e usar eem outro lugar), o que também me deixaria escolher em uma lista de ramos que começam com origin/my-feature-branch. Isso funcionou bem para mim também. Ainda mais recentemente, no entanto, isso não funciona mais e eu não consegui descobrir a melhor maneira de definir um ramo upstream.

Quando eu uso P ea primeira opção para um ramo para empurrar é origin/my-feature-branch, que é quase sempre o que eu quero. No entanto, ele não define origin/my-feature-branchcomo o upstream da minha filial local. Usar P ume permite escolher o ramo upstream, mas origin/my-feature-branchnão está na lista, e eu tenho que digitar origin/my-feature-branchsem concluir a guia (sei que isso não é difícil, mas é propenso a erros do usuário e é mais lento que a linha de comando).

Essa é a única maneira de definir uma ramificação upstream agora ou estou perdendo alguma coisa? Analisei outras discussões e documentação relacionadas ao problema, mas todas as fontes que encontrei parecem desatualizadas.

elethan
fonte
11
Acho que a <remote>/<branch>peça foi acidentalmente deixada de fora do prompt (consulte este comentário ). Enquanto isso, você pode definir magit-push-current-set-remote-if-missingpara zero.
Kyle Meyer
Eu apenas consertei isso. Minha resposta abaixo assume essa correção.
tarsius
Encontrados e corrigidos alguns outros problemas relacionados. Você provavelmente terá que esperar algumas horas para que Melpa o atualize antes que tudo esteja 100% correto.
tarsius

Respostas:

11

Existem várias maneiras de configurar o upstream, pressionando ou sem pressionar ao mesmo tempo.

Se magit-push-current-set-remote-if-missingnão for nil(o padrão), você verá algo como:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Para enviar origin/featuree definir isso como upstream, pressione ue, em seguida, RETaceite o candidato a conclusão padrão.

Se magit-push-current-set-remote-if-missingfor nil, você verá isso:

Push feature to
 e elsewhere

Se você pressionou pagora, seria informado que o upstream não está configurado (o que implica que você não pode avançar para o upstream se não houver upstream).

Mas, se magit-push-current-set-remote-if-missingestiver nil, a lista de opções será exibida --set-upstream, para que você possa usar P - u pcomo está acostumado (exceto que o segundo p é minúsculo). Porém, há uma complicação: depois de alterar o valor, magit-push-current-set-remote-if-missingvocê deve reiniciar o Emacs para --set-upstreamaparecer ou desaparecer.

Finalmente, você pode definir o montante usando o "upstream conjunto (e fazer mais nada)" comando: b uorigin/masterRET. Observe que, quando você usa essa abordagem, é possível selecionar apenas uma ramificação que já existe.


Mas seria melhor configurar o push-remote e empurrar para isso. Para saber mais sobre o push-remote e como ele difere do upstream, consulte o nó Ramificação no manual de informações (a versão da Web ainda não foi atualizada).

Basicamente, a ramificação upstream é a ramificação na qual sua ramificação de recursos será eventualmente mesclada (mesclando ou reestruturando, não pressionando), provavelmente origin/master. E o push-remote é para onde você envia as ramificações dos recursos enquanto ainda trabalha nelas ou para que outras pessoas possam mesclá-las. Se a ramificação local for nomeada featuree o push-remote for my-fork, pressione essa ramificação usando P ppush para my-fork/feature. (O "push-to-branch" não pode ser configurado, o nome da ramificação no push-remote é sempre o mesmo que o nome local.)

Portanto, enquanto sua pergunta era algo como "como eu empurro para o upstream, enquanto configuro o upstream ao mesmo tempo", minha recomendação é não empurra para o upstream, mas empurra para o push-remote.

Desde que você não tenha alterado o valor, magit-push-current-set-remote-if-missingvocê pode configurar o push-remote usando P psome-remoteRET. Porém, como você provavelmente envia todas as ramificações de recurso para o mesmo controle remoto, é melhor definir uma vez para todas as ramificações e concluir com ele: be M-paté que o controle remoto correto seja selecionado.


Observe também que geralmente não deve ser necessário definir explicitamente a ramificação upstream. Quando você cria uma nova ramificação e seleciona uma ramificação remota como ponto de partida, isso é usado como upstream.

Infelizmente, o ponto de partida geralmente é uma ramificação local e, nesse caso, o Git, por padrão, não o usa como o upstream. Mas isso pode ser facilmente corrigido executando-o uma vez:

git config --global branch.autoSetupMerge always

O valor padrão é true, o que significa "definir o ponto de partida como upstream, desde que seja uma ramificação remota ".


A propósito, o mesmo se aplica ao controle remoto. Isso também deve ser definido semi-automaticamente em "novos" repositórios. Se você clonar um repositório, você será perguntado se deseja usar origincomo push-remote. Você deve responder "sim", a menos que queira adicionar outro controle remoto, por exemplo my-fork, que deve ser usado como controle remoto. Quando você adiciona um novo controle remoto M ae remote.pushDefaultainda não está definido, será perguntado se deseja usar o controle remoto recém-adicionado como o controle remoto.

Isso pode ser configurado usando magit-clone-set-remote.pushDefaulte magit-remote-add-set-remote.pushDefault.

Outra opção avançada é a magit-branch-prefer-remote-upstreampadrão nil. Se você configurá-lo como te selecionar uma ramificação local como ponto de partida para uma nova ramificação, o upstream do ponto de partida pode (de acordo com algumas regras, consulte doc-string) ser usado como upstream, em vez de o próprio ponto de partida.

tarso
fonte