Quelle est la différence entre git push.default = current et push.default = upstream?

La page de manuel de git-config répertorie ces options pour push.default:

nothing - do not push anything. matching - push all matching twigs. All twigs having the same name in both ends are considered to be matching. This is the default. upstream - push the current branch to its upstream branch. tracking - deprecated synonym for upstream. current - push the current branch to a branch of the same name. 

Dans la plupart des cas, je suppose que pousser vers une twig en amont d’une twig équivaudrait à pousser vers une twig du même nom, puisque la twig en amont aurait normalement le même nom et depuis la twig du même nom (“current” ) serait normalement (ou toujours, par définition?) en amont. Alors, quelle est la différence?

UPDATE : La page de manuel relative à git-config a été mise à jour (comme on peut s’y attendre), les distinctions effectuées ici sont donc beaucoup plus claires.

Vous avez résumé la différence dans votre question. upstream pousse vers la twig amont configurée , alors que current suppose que la twig amont a le même nom que la twig locale actuelle et passe à ce nom spécifique. En réalité, il n’y a aucune raison de supposer que la twig de suivi en amont d’une succursale locale porte le même nom que la twig locale elle-même.

Par exemple, si vous travaillez dans plusieurs référentiels ou sur de nombreuses télécommandes de développeur partagées, vous finissez souvent par suivre différents segments de la même twig, tels que allen-master ou susan-master , tous deux dépistant la twig principale dans les repositorys Allen et Susan. , respectivement. Dans ce cas, le paramètre current serait le paramètre incorrect, car ces noms de twig n’existent pas sur leurs télécommandes. upstream , cependant, fonctionnerait très bien.

Un exemple plus pratique pourrait être le suivi d’un référentiel de development et de production . Votre stream de travail peut utiliser une twig de ligne principale différente pour chacun, mais cela peut être déroutant. Supposons que vous étiez un intégrateur de code et que vous vouliez suivre les twigs master deux référentiels séparément.

 git checkout -b production --track production/master git checkout -b development --track development/master 

Maintenant, vous avez deux twigs qui suivent leurs référentiels respectifs, et ni l’un ni l’autre n’utilisent la convention d’affectation de noms master . Il y a peu de confusion sur les noms de twig: ils décrivent explicitement ce qu’ils suivent. Néanmoins, push.default = current n’aurait aucun sens, car aucune télécommande ne contient une twig de development ou de production .

current poussera la twig en cours vers une twig portant le même nom sur le repo distant.

upstream poussera la twig en cours vers la twig en amont.

La twig amont est une twig explicitement ou implicitement définie comme étant en amont de votre twig actuelle. Cela signifie que push and pull par défaut se synchronisera avec cette twig. La twig en amont peut être dans le même référentiel que la twig actuelle elle-même. Vous pouvez faire des choses intéressantes, comme configurer votre twig principale locale en amont de votre twig locale (rubrique), et les pousser et les tirer.

La configuration implicite en amont est effectuée via la valeur de configuration branch.autosetupmerge . Vous pouvez trouver de la documentation dans la page d’aide de git config . La configuration explicite en amont se fait avec l’option -u de la commande git branch . Voir la page d’aide pour plus de détails.