Gitextensions: La fenêtre de résolution des conflits qualifie le local comme le leur et distant comme le nôtre pendant la fusion normale.

Créé le 29 nov. 2011  ·  13Commentaires  ·  Source: gitextensions/gitextensions

Description

Lorsque lors d'une fusion locale régulière, il y a un conflit, le menu contextuel des fichiers répertoriés dans la fenêtre de résolution de conflit affiche les entrées suivantes:

Choose local (theirs)
Choose remote (ours)

D'après ce que je comprends de git, il devrait dire:

Choose local (ours)
Choose remote (theirs)

Cela peut être assez déroutant, car les deux noms se contredisent.

Comment reproduire

  1. Démarrez une fusion locale qui produira un conflit de fusion.
  2. Lorsqu'on vous demande si vous souhaitez résoudre les conflits, appuyez sur "Oui".
  3. Choisissez un fichier dans la fenêtre de conflit et appuyez dessus avec le bouton droit de la souris.

    Résultat attendu

Un menu s'ouvre contenant, entre autres, les entrées suivantes:

Choose local (ours)
Choose remote (theirs)

Résultat actuel

Un menu s'ouvre contenant, entre autres, les entrées suivantes:

Choose local (theirs)
Choose remote (ours)
bug

Commentaire le plus utile

Je suis d'accord avec dleinhaeuser, ces noms sont vraiment vagues.

Les débutants se sentent toujours confus lors de la sélection de la version à sélectionner. J'aide mes amis avec git et la plupart d'entre eux m'ont demandé quel choix était correct dans cette fenêtre.

Je ne suis pas sûr que git ait un flux de travail typique, car tout le monde l'utilise avec ses propres préférences. Par exemple, lorsque je travaille sur une branche thématique pendant quelques jours ou quelques semaines, je préfère fusionner le master dans ma branche thématique de temps en temps pour éviter l'enfer des fusions et résoudre les conflits le plus rapidement possible. Cela aide à conserver une base de code compatible prête à fusionner et est vraiment utile pour les longues branches de fonctionnalités.

Mes suggestions sont simplement d'écrire les noms de branche réels et de faire en sorte que l'utilisateur sache quelle branche contient le code réel.
Par exemple, "choisissez le nôtre (maître)" et "choisissez le leur (feature-branch-42)" sont des noms beaucoup plus clairs.

Tous les 13 commentaires

GitExtensions est en fait correct. Voir la section sur la fusion dans ce lien: http://stackoverflow.com/questions/3051461/git-rebase-keeping-track-of-local-and-remote

"nôtre" est la branche actuelle, tandis que "leur" est la branche dans laquelle nous fusionnons. Le workflow git typique consiste à créer une branche de rubrique locale, à s'y engager, puis à la fusionner dans la branche "master". Ainsi, «le leur» est également appelé «local», et «le nôtre» est appelé «distant», car il suit généralement l'état du référentiel distant.

Je suis d'accord avec dleinhaeuser, ces noms sont vraiment vagues.

Les débutants se sentent toujours confus lors de la sélection de la version à sélectionner. J'aide mes amis avec git et la plupart d'entre eux m'ont demandé quel choix était correct dans cette fenêtre.

Je ne suis pas sûr que git ait un flux de travail typique, car tout le monde l'utilise avec ses propres préférences. Par exemple, lorsque je travaille sur une branche thématique pendant quelques jours ou quelques semaines, je préfère fusionner le master dans ma branche thématique de temps en temps pour éviter l'enfer des fusions et résoudre les conflits le plus rapidement possible. Cela aide à conserver une base de code compatible prête à fusionner et est vraiment utile pour les longues branches de fonctionnalités.

Mes suggestions sont simplement d'écrire les noms de branche réels et de faire en sorte que l'utilisateur sache quelle branche contient le code réel.
Par exemple, "choisissez le nôtre (maître)" et "choisissez le leur (feature-branch-42)" sont des noms beaucoup plus clairs.

oui, c'est très déroutant. Les nôtres et les leurs ont une signification réelle dans git-land: vous pouvez les utiliser pour changer la stratégie de fusion, vous devez donc les utiliser de la même manière que git les utilise. Et oui, il serait préférable de mentionner le nom de la branche, mais je ne suis pas sûr que kdiff le supporte.

Considérez la séquence de commandes suivante:

> mkdir test && cd test
> git init
> touch test.txt
> git add test.txt
> git commit -m "..."
> git branch test
> git checkout test
> echo "test" >test.txt
> git commit -a -m "..."
> git checkout master
> echo "master" >test.txt
> git add -a -m "..."
> git merge test

À ce stade, il y aura un conflit de fusion sur test.txt.
Si j'ouvre maintenant git gui, il affichera le conflit dans la fenêtre de validation.
Un clic droit sur la fenêtre diff proposera "Utiliser la version distante" et "Utiliser la version locale".

  • Si je choisis "Utiliser la version locale", le contenu de test.txt sera "maître" après la fusion.
  • Si je choisis "Utiliser la version distante", le contenu de test.txt sera "test" après la fusion.

Donc, selon la logique de git gui, la branche actuelle est "locale" et la branche dans laquelle je fusionne est "distante".

Si je continue à utiliser la ligne de commande au lieu de git gui pour résoudre le conflit, je peux exécuter les commandes suivantes:

> git checkout --ours test.txt
> cat test.txt
master
> git checkout --theirs test.txt
> cat test.txt
test

Ainsi, sur la CLI, «le nôtre» fait référence à la branche actuelle et «la leur» à celle dans laquelle je fusionne.
C'est pourquoi je pense que le menu des extensions Git donne des informations contradictoires.

Peut-être que les nôtres et les leurs changent de place lorsque les fusions sont effectuées différemment. Si tel est le cas, je n'en suis pas conscient.

Merci, cela a du sens. Et, en fait, lorsque vous lancez kdiff pour résoudre un conflit, la branche actuelle (--ours) est appelée .LOCAL. Donc, oui, il semble qu'il y ait un problème avec le menu.

D'accord. Apparemment, "le nôtre" et "le leur" changent de place lors d'un rebase.

Se pourrait-il que git gui soit configuré de telle sorte que "local" et "distant" aient un sens pour un conflit de fusion lors d'une opération d'extraction?

Dans tous les cas, cela déroute certainement les gens qui passent de git gui (comme moi).
Il suffirait peut-être de le souligner dans la documentation.

Hmmmmmm, je suppose que si vous faites un "pull --rebase", (que j'utilise par défaut) alors le menu peut être correct, à cause du nôtre et du leur. Mais oui, cela est extrêmement déroutant et devrait être documenté quelque part. En outre, le local et à distance
la terminologie est très déroutante, car nous avons déjà des succursales locales et des référentiels distants.

BTW, vous pouvez le faire un peu plus efficacement:

test mkdir et test cd
git init
toucher test.txt
git add test.txt
git commit -m "..."
git checkout -b test *echo "test"> test.txtgit commit -am "..."
git checkout master
echo "master"> test.txt
git commit -am "..." **
test de fusion git

L'explication originale du problème par dleinhaeuser est correcte.
Les mots corrects doivent être

 Choisissez local (le nôtre)
 Choisissez la télécommande (la leur)

Vous pouvez le voir en sélectionnant «Ouvrir local avec» et «Ouvrir à distance avec» et voir «local» ouvre votre fichier avec vos nouvelles modifications et à distance ouvre leur version.

Rebase est plus compliqué (je regarde toujours cette image pour m'assurer que je le fais de la bonne façon, haha). «Le nôtre» et «le leur» est incorrect, à mon avis.
Supposons que vous vouliez rebaser "Branch A" sur "Master".
Bien que vous deviez être extrait dans la "Branche A" afin de rebaser la Branche A sur Maître, dans le conflit de fusion, vous êtes considéré comme étant dans la Branche Maître (soyez indulgents avec moi ici ...). Vous êtes considéré comme étant en Master parce que vous essayez de "jouer" le commit de la Branche A APRÈS les commits du Maître, donc c'est similaire à être dans la branche du Maître et faire un pull.

droit. Cette publication explique assez bien les choses:

http://stackoverflow.com/questions/3051461/git-rebase-keeping-track-of-local-and-remote

Ainsi, local / distant devrait être le nôtre / le leur pour la fusion, et le leur / le nôtre pour le rebase.

Ceci est particulièrement déroutant pour les conflits post-pull, où le leur est clairement éloigné. Quelqu'un envisage-t-il de le réparer?

Ok, les étiquettes devraient être corrigées dans le commit ci-dessus.
La fusion normale dit

 Choisissez local (le nôtre)
 Choisissez la télécommande (la leur)

et la fusion de rebase reste inchangée ie.

 Choisissez local (le leur)
 Choisissez la télécommande (la nôtre)

Ce serait beaucoup plus facile de comprendre ce qui se passe si, au lieu de LOCAL / REMOTE ou OURS / THEIRS, il devait simplement afficher les noms des branches.

Voir # 6582 pour une discussion plus récente

Cette page vous a été utile?
0 / 5 - 0 notes