web-dev-qa-db-fra.com

Git - Quelle est la différence entre Push.default "matching" et "simple"

J'utilise git depuis un moment maintenant, mais je n'ai jamais eu à mettre en place un nouveau repo distant et je suis curieux de le faire. J'ai lu des tutoriels et je ne sais pas trop comment faire fonctionner "git push".

Si j'utilise simplement git Push, il me demande de voir une branche par défaut (?) À pointer? Quelle est la différence entre ces deux options qu’il me fournit?

git config --global Push.default matching
git config --global Push.default simple

La correspondance ajoute simplement toutes les branches que j'ai sur mon dépôt local, et si elles ne correspondent pas, je dois alors le dire manuellement à Push, quelles que soient les nouvelles branches locales que j'ai, correct? Est-ce la meilleure pratique à utiliser ou est-ce mieux simple?

266
Josh

git Push peut pousser toutes les branches ou une seule en fonction de cette configuration:

Poussez toutes les branches

git config --global Push.default matching

Il poussera toutes les branches vers la branche distante et les fusionnerait. Si vous ne voulez pas pousser toutes les branches, vous pouvez uniquement pousser la branche actuelle.

Appuyez uniquement sur la branche actuelle

git config --global Push.default simple

Donc, il est préférable, à mon avis, d'utiliser cette option et de pousser votre code branche par branche. Il est préférable de pousser les branches manuellement et individuellement.

337
Lalit Sachdeva

De la documentation GIT: Git Docs

Ci-dessous donne les informations complètes. En bref, simple Appuyez uniquement sur le current working branch et même dans ce cas uniquement si le nom de celui-ci est identique. Ceci est un très bon réglage pour les débutants et deviendra le paramètre par défaut dans GIT 2.0

Alors que matching poussera toutes les branches localement qui portent le même nom sur la télécommande. (Sans égard à votre branche de travail actuelle). Cela signifie que potentiellement de nombreuses branches différentes seront poussées, y compris celles que vous ne souhaitez même pas partager.

Dans mon usage personnel, j’utilise généralement une option différente: current qui active la branche en cours de travail (car j’ai toujours une branche pour toute modification). Mais pour un débutant, je suggérerais simple

Push.default
Définit l'action que git Push doit entreprendre si aucun refspec n'est donné explicitement. Différentes valeurs sont bien adaptées à des flux de travail spécifiques; Par exemple, dans un flux de travail purement central (c'est-à-dire que la source d'extraction est égale à la destination Push), l'amont est probablement ce que vous voulez. Les valeurs possibles sont:

rien - ne rien pousser (erreur en sortie) sauf si un refspec est donné explicitement. Ceci est principalement destiné aux personnes qui veulent éviter les erreurs en étant toujours explicites.

current - Poussez la branche actuelle pour mettre à jour une branche du même nom du côté destinataire. Fonctionne dans les flux de travail centraux et non centraux.

upstream - Renvoie la branche actuelle vers la branche dont les modifications sont généralement intégrées à la branche actuelle (appelée @ {upstream}). Ce mode n’a de sens que si vous accédez au même référentiel que celui que vous utiliseriez normalement (c’est-à-dire le flux de travail central).

simple - dans le flux de travail centralisé, travaillez comme en amont avec une sécurité accrue pour refuser de Push si le nom de la branche en amont est différent de celui de la branche locale.

Lorsque vous appuyez sur une télécommande différente de celle sur laquelle vous tirez normalement, travaillez comme courant. Ceci est l'option la plus sûre et convient aux débutants.

Ce mode deviendra le mode par défaut dans Git 2.0.

correspondance: poussez toutes les branches du même nom aux deux extrémités. Ainsi, le référentiel que vous poussez mémorisera l’ensemble des branches qui seront expulsées (par exemple, si vous appuyez toujours sur maint et master et qu’il n’existe aucune autre branche, le référentiel auquel vous poussez aura ces deux branches, ainsi que vos maint et master locaux. sera poussé là).

Pour utiliser ce mode de manière efficace, vous devez vous assurer que toutes les branches que vous voulez pousser sont prêtes à être sorties avant de lancer git Push, car l’intérêt de ce mode est de vous permettre de pousser toutes les branches en une fois. Si vous avez généralement fini de travailler sur une seule branche et de diffuser le résultat, alors que les autres branches sont inachevées, ce mode n'est pas pour vous. De plus, ce mode ne convient pas pour l'insertion dans un référentiel central partagé, car d'autres personnes peuvent y ajouter de nouvelles branches ou mettre à jour la pointe des branches existantes en dehors de votre contrôle.

C'est actuellement la valeur par défaut, mais Git 2.0 changera la valeur par défaut en simple.

87
UpAndAdam

Notes de publication de Git v2.0

Notes de compatibilité ascendante

Quand git Push [$there] ne dit pas quoi Push, nous avons utilisé jusqu'à présent la sémantique "correspondante" (toutes vos branches ont été envoyées à la télécommande tant qu'il y a déjà des branches du même nom). Dans Git 2.0, la valeur par défaut est maintenant la "simple" sémantique, qui pousse:

  • uniquement la branche en cours vers la branche portant le même nom, et uniquement lorsque la branche en cours est configurée pour s'intégrer à cette branche distante, si vous effectuez une opération sur la même télécommande que celle à partir de laquelle vous effectuez la récupération; ou

  • seule la branche en cours vers la branche du même nom, si vous poussez sur une télécommande qui n’est pas celle où vous voulez aller chercher.

Vous pouvez utiliser la variable de configuration "Push.default" pour changer cela. Si vous êtes un ancien qui veut continuer à utiliser la sémantique "correspondante", vous pouvez définir la variable sur "correspondante", par exemple. Lisez la documentation pour d'autres possibilités.

Lorsque git add -u et git add -A sont exécutés dans un sous-répertoire sans spécifier les chemins à ajouter à la ligne de commande, ils agissent sur l’ensemble de l’arborescence pour assurer la cohérence avec git commit -a et les autres commandes (ces commandes ne fonctionne que sur le sous-répertoire actuel). Dites git add -u . ou git add -A . si vous souhaitez limiter l'opération au répertoire actuel.

git add <path> est identique à git add -A <path> maintenant, de sorte que git add dir/ remarquera les chemins que vous avez supprimés du répertoire et enregistrera la suppression. Dans les anciennes versions de Git, git add <path> ignorait les suppressions. Vous pouvez dire git add --ignore-removal <path> pour ajouter uniquement les chemins ajoutés ou modifiés dans <path>, si vous le souhaitez vraiment.

2
CodeWizard