Como impedir que o Magit pergunte para onde empurrar um galho?

10

Ao ligar magit-push-currentcom a P Ppartir do buffer de status, Magit 2.1.0pergunta-me onde enviar a ramificação pela primeira vez, quando o upstream não está definido.

Como ele pode gerar automaticamente o nome como costumava fazer antes?

z1naOK9nu8iY5A
fonte
2
Caso você não saiba, o nome gerado automaticamente é uma das opções de conclusão. Portanto, na primeira vez em que você enviar some-branch-namepara o origincontrole remoto, provavelmente poderá digitar o TAB s TABe obter o nome desejado.
Malabarba 07/07/2015
Oh ok, eu não sabia, obrigado. O problema é que tenho muitas ramificações começando com os mesmos prefixos, o que não é muito útil, também sempre coloco ramificações remotas com o mesmo nome que as ramificações locais.
Z1naOK9nu8iY5A

Respostas:

8

Atualização: o "push branch" mencionado abaixo foi implementado agora. Consulte a documentação sobre ramificação para obter mais informações.

Você precisa definir o ramo upstream uma vez. Depois de ter feito isso P Pempurra para que e você vai obter listas de mudanças unpulled e unpushed no buffer de status (desde que haja alguma).

Existem várias maneiras de definir o ramo upstream. Você pode usar o --set-upstreaminterruptor do pop-up push: P -u P. Ou usar o comando que define o montante e não faz nada mais: b u.

Agora, o Magit agora define automaticamente o ramo upstream ao criar um novo ramo, desde que o "ponto de partida" seja um nome de ramo. Isso funciona para "upstreams" locais e remotos. Mas observe que, se você escolher uma filial local como ponto de partida, isso não ajudará você a pressionar. Transferir do repositório atual para o repositório atual obviamente não faz sentido e não é permitido.

Portanto, quando o ramo "upstream" é de fato outro ramo local, P Pcomporta - se como se nenhum ramo upstream estivesse configurado e se comporta exatamente como P e. O mesmo acontece se nenhum upstream estiver configurado.

Isso devido a uma limitação no Git: só ​​é possível associar um outro ramo a algum ramo, e esse ramo é chamado de "ramo upstream". Seria melhor se houvesse pelo menos uma ramificação "upstream" e "publicação". Pretendo implementar isso no Magit eventualmente. Veja a edição # 1485 .

Portanto, se você deseja poder fazer o push com P Pisso, o ramo "upstream" deve ser, por exemplo, "origem / mestre", não "mestre".


Estou pensando em adicionar uma variante push que sempre é executada git pushsem argumentos. O que isso faz dependeria exclusivamente da configuração do Git.

tarso
fonte
Eu ramifiquei mastere ele não configurou a montante, talvez eu deva ramificar origin/masterpara que o montante seja definido automaticamente?
Z1naOK9nu8iY5A
Veja a resposta atualizada.
tarsius 7/07/2015
11
Ramificação do origin/masterconjunto origin/mastercomo a montante, mas eu esperava ter a origin/branch-namemontante.
Z1naOK9nu8iY5A
Se é isso que você quer, é melhor fazê-lo durante o push. P -p P <... completion ...> RETObserve que ele origin/branch-nameé oferecido como candidato a conclusão, para que você não precise digitá-lo.
tarsius 7/07/2015
2
Isso é doloroso quando você está usando o gitflow e solicita pull para revisão de código, com uma ramificação por recurso, porque normalmente você apenas envia uma vez e é sempre criar uma ramificação remota com o mesmo nome que a ramificação local. Enviar para uma ramificação nomeada diferente seria uma execução final em torno da revisão de código.
Barry Kelly
3

Eu uso o seguinte conselho que é ativado automaticamente --set-upstreamquando o ramo atual ainda não possui um montante:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

Combinado com a conclusão do ido, isso permite enviar uma nova ramificação com P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
fonte
Isso é tão legal! Muito obrigado!
Z1naOK9nu8iY5A
0

Eu apenas crio o novo ramo com b ce edito o .git/configarquivo para apontar para, em origin/branchvez de procurar todo o material do magit 2, que parece não funcionar de qualquer maneira.

Mudança:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

Para

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

Isso funciona, enquanto eu ainda não encontrei uma combinação de teclas no magit2 que realiza a mesma coisa. Tentar configurar o controle remoto não funciona porque ainda não existe na origem.

David N. Welton
fonte
11
O upstream pode ser configurado usando bu. Mas isso usa git branch --set-upstream-toe, como você sabe, o Git não pode definir um ramo inexistente como o upstream e, portanto, o Magit também não.
tarsius 31/08/2015
@ tarso magit 1 parecia fazer o que eu precisava. Só estou tentando recuperar alguma aparência desse fluxo de trabalho.
David N. Welton