Comment configurer la branche amont pour pousser une branche locale dans in magit?

11

D'après ce dont je me souviens, si je travaille sur une branche, par exemple, my-feature-branchje pouvais le faire à partir du magit-statusmenu avec P P, puis en sélectionnant la branche distante dans une liste qui avait origin/my-feature-branchen haut. Cela a fonctionné à merveille.

Récemment, à partir de cette discussion , je pouvais faire quelque chose de similaire avec P -u e(ouvrir le magit-push-popup, définir le --set-upstreamdrapeau et utiliser epour ailleurs), ce qui me permettrait également de choisir parmi une liste de branches commençant par origin/my-feature-branch. Cela a bien fonctionné pour moi aussi. Encore plus récemment cependant, cela ne fonctionne plus, et je n'ai pas été en mesure de trouver la meilleure façon de définir une branche en amont.

Lorsque j'utilise P ela première option pour une branche vers laquelle pousser origin/my-feature-branch, c'est presque toujours ce que je veux. Cependant, il n'est pas défini origin/my-feature-branchcomme amont pour ma branche locale. L'utilisation P ume permet de choisir la branche en amont, mais origin/my-feature-branchn'est pas dans la liste, et je dois taper origin/my-feature-branchsans complétion de tabulation (je sais que ce n'est pas difficile, mais il est sujet à des erreurs utilisateur et est plus lent que la ligne de commande).

Est-ce la seule façon de définir une branche en amont maintenant, ou est-ce que je manque quelque chose? J'ai examiné d'autres discussions et documents liés au problème, mais toutes les sources que j'ai trouvées semblent obsolètes.

elethan
la source
1
Je pense que la <remote>/<branch>partie a été accidentellement laissée de côté (voir ce commentaire ). En attendant, vous pouvez régler magit-push-current-set-remote-if-missingsur zéro.
Kyle Meyer
Je viens de corriger ça. Ma réponse ci-dessous suppose ce correctif.
tarsius
Trouvé et corrigé quelques autres problèmes connexes. Vous devrez probablement attendre quelques heures pour que Melpa se rattrape avant que tout ce qui suit ne soit correct à 100%.
tarsius

Réponses:

11

Il existe plusieurs façons de régler l'amont, en poussant ou sans pousser en même temps.

Si magit-push-current-set-remote-if-missingest non nil(par défaut), alors vous verrez quelque chose comme:

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

Pour pousser origin/featureet définir cela comme amont, appuyez sur upuis sur RETpour accepter le candidat d'achèvement par défaut.

Si magit-push-current-set-remote-if-missingc'est le cas nil, vous le verriez plutôt:

Push feature to
 e elsewhere

Si vous avez appuyé pmaintenant, on vous dira que l'amont n'est pas configuré (ce qui implique que vous ne pouvez pas pousser vers l'amont s'il n'y a pas d'amont).

Mais si magit-push-current-set-remote-if-missingc'est le cas nil, la liste des commutateurs apparaîtra --set-upstream, vous pouvez donc l'utiliser P - u pcomme vous en avez l'habitude (sauf que le deuxième p est en minuscules). Il y a cependant une complication: après avoir changé la valeur de magit-push-current-set-remote-if-missingvous devez redémarrer Emacs pour --set-upstreamapparaître ou disparaître.

Enfin , vous pouvez régler l'amont à l' aide du « amont ensemble (et ne rien faire d' autre) » commande: b uorigin/masterRET. Notez que lorsque vous utilisez cette approche, vous ne pouvez sélectionner qu'une branche qui existe déjà.


Mais il serait préférable de configurer le push-remote et de pousser à cela. Pour en savoir plus sur le push-remote et en quoi il diffère de l'amont, consultez le nœud Branching dans le manuel d'informations (la version Web n'a pas encore été mise à jour).

Fondamentalement, la branche en amont est la branche dans laquelle votre branche de fonctionnalité sera finalement fusionnée (en fusionnant ou en rebasant, pas en poussant), très probablement origin/master. Et la télécommande distante est l'endroit où vous poussez vos branches de fonctionnalités tout en continuant à travailler dessus ou pour que quelqu'un d'autre puisse les fusionner. Si la branche locale est nommée featureet la push-remote l'est my-fork, alors pousser cette branche en utilisant P pserait pousser vers my-fork/feature. (Le "push-to-branch" ne peut pas être configuré, le nom de la branche sur la push-remote est toujours le même que le nom local.)

Donc, alors que votre question était quelque chose comme "comment puis-je pousser vers l'amont, tout en configurant l'amont en même temps", ma recommandation est de ne pas pousser du tout vers l'amont, mais plutôt de pousser vers la télécommande distante.

Pourvu que vous n'ayez pas changé la valeur de magit-push-current-set-remote-if-missingvous pouvez configurer le push-remote en utilisant P psome-remoteRET. Mais, comme vous poussez probablement toutes les branches de fonctionnalités sur la même télécommande, il est préférable de définir la push-remote une fois pour toutes les branches et d'en finir: bpuis M-pjusqu'à ce que la bonne télécommande soit sélectionnée.


Notez également qu'il ne devrait généralement pas être nécessaire de définir explicitement la branche amont. Lorsque vous créez une nouvelle branche et sélectionnez une branche distante comme point de départ, celle-ci est utilisée comme amont.

Malheureusement, le point de départ est généralement une branche locale et dans ce cas, Git par défaut ne l'utilise pas en amont. Mais cela peut facilement être résolu en exécutant ceci une fois:

git config --global branch.autoSetupMerge always

La valeur par défaut est true, ce qui signifie "définir le point de départ en amont, à condition qu'il s'agisse d'une branche distante ".


Soit dit en passant, la même chose s'applique à la télécommande push. Cela aussi devrait généralement être défini semi-automatiquement dans les "nouveaux" référentiels. Si vous clonez un référentiel, il vous sera demandé si vous souhaitez l'utiliser origincomme push-remote. Vous devez répondre «oui», sauf si vous allez ajouter une autre télécommande, par exemple my-fork, qui devrait être utilisée comme télécommande. Lorsque vous ajoutez une nouvelle télécommande à l'aide de M aet remote.pushDefaultn'est pas encore définie, il vous sera alors demandé si vous souhaitez utiliser la télécommande nouvellement ajoutée comme télécommande push.

Cela peut être configuré à l'aide de magit-clone-set-remote.pushDefaultet magit-remote-add-set-remote.pushDefault.

Une autre option avancée est magit-branch-prefer-remote-upstream, par défaut nil. Si vous le définissez sur t, puis sélectionnez une branche locale comme point de départ pour une nouvelle branche, alors l'amont du point de départ pourrait (selon certaines règles, voir doc-string) être utilisé comme amont, au lieu de le point de départ lui-même.

tarse
la source