Comment empêcher Magit de demander où pousser une branche?

10

Lors d'un appel magit-push-currentavec P Pdepuis le tampon d'état, Magit 2.1.0me demande où pousser la branche la première fois, lorsque l'amont n'est pas défini.

Comment peut-il laisser générer automatiquement le nom comme il le faisait auparavant?

z1naOK9nu8iY5A
la source
2
Si vous ne le savez pas, le nom généré automatiquement est l'une des options de complétion. Ainsi, la première fois que vous appuyez some-branch-namesur la origintélécommande, vous pouvez probablement taper o TAB s TABet vous obtiendrez le nom que vous voulez.
Malabarba
Oh ok je ne savais pas, merci. Le problème est que j'ai beaucoup de branches commençant par les mêmes préfixes, ce qui n'est pas très pratique, aussi je mets toujours des branches distantes avec le même nom que les branches locales.
z1naOK9nu8iY5A

Réponses:

8

Mise à jour: La "branche push" mentionnée ci-dessous a été implémentée à présent. Consultez la documentation sur la branche pour plus d'informations.

Vous devez définir la branche en amont une fois. Une fois que vous avez fait cela P Ppousse à cela et vous obtiendrez des listes de modifications non tirées et non poussées dans le tampon d'état (à condition qu'il y en ait).

Il existe différentes manières de définir la branche amont. Vous pouvez utiliser le --set-upstreambouton de la poussée pop - up: P -u P. Ou utilisez la commande qui définit l'amont et ne rien d' autre: b u.

Magit définit également automatiquement la branche amont lors de la création d'une nouvelle branche, à condition que le "point de départ" soit un nom de branche. Cela fonctionne pour les "amonts" locaux et distants. Mais notez que si vous choisissez une branche locale comme point de départ, cela ne vous aidera pas à pousser. Pousser du référentiel actuel vers le référentiel actuel n'a évidemment aucun sens et est interdit.

Ainsi, lorsque la branche "en amont" est en fait une autre branche locale, elle P Pse comporte comme si aucune branche en amont n'était configurée et se comporte exactement comme P e. Il en va de même si aucun amont n'est configuré du tout.

Ceci en raison d'une limitation dans Git: on ne peut associer qu'une autre branche à une branche, et cette branche est alors appelée "branche amont". Il serait préférable qu'il y ait au moins une branche "amont" et une branche "publier". J'ai l'intention de mettre cela en œuvre dans Magit à terme. Voir problème # 1485 .

Donc, si vous voulez pouvoir pousser avec juste P Palors la branche "en amont" doit être par exemple "origine / maître", pas "maître".


J'envisage d'ajouter une variante push qui s'exécute toujours git pushsans aucun argument. Ce que cela fera dépendra alors exclusivement de la configuration de Git.

tarse
la source
Je me suis ramifié à partir de masteret il n'a pas été configuré en amont, dois-je peut-être me connecter à origin/masterpour que l'amont soit automatiquement défini?
z1naOK9nu8iY5A
Voir la réponse mise à jour.
tarsius
1
Ramification à partir de l' origin/masterensemble origin/masteren amont, mais je m'attendais à ce origin/branch-nameque ce soit en amont.
z1naOK9nu8iY5A
Si c'est ce que vous voulez, il est préférable de le faire pendant la poussée. P -p P <... completion ...> RETNotez qu'il origin/branch-nameest proposé en tant que candidat à l'achèvement, vous n'avez donc pas à le saisir.
tarsius
2
Cela est pénible lorsque vous utilisez gitflow et pullz des demandes de révision de code, avec une branche par fonctionnalité, car vous n'avez généralement à pousser qu'une seule fois, et c'est toujours pour créer une branche distante avec le même nom que la branche locale. Pousser vers une autre branche nommée serait une révision finale du code.
Barry Kelly
3

J'utilise les conseils suivants qui permettent automatiquement --set-upstreamlorsque la branche actuelle n'a pas encore de amont:

(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)

Combiné avec l'achèvement des idos, cela permet de pousser une nouvelle branche avec P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
la source
C'est trop cool! Merci beaucoup!
z1naOK9nu8iY5A
0

Je crée simplement la nouvelle branche avec b cpuis édite le .git/configfichier vers origin/branchlequel pointer au lieu de faire le tour avec tous les trucs de magit 2, qui ne semble pas fonctionner de toute façon.

Changement:

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

À

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

Cela fonctionne, alors que je n'ai toujours pas trouvé de combinaison de touches dans magit2 qui accomplisse la même chose. Essayer de régler la télécommande ne fonctionne pas car elle n'existe pas encore à l'origine.

David N. Welton
la source
1
L'amont peut être réglé à l'aide de bu. Mais cela utilise git branch --set-upstream-toet comme vous le savez, Git ne peut pas définir une branche inexistante en amont et Magit ne peut pas non plus.
tarsius
@tarsius magit 1 semblait faire ce dont j'avais besoin. J'essaie juste de retrouver un semblant de ce flux de travail.
David N. Welton du