2016-12-14 1 views
1

Je fusionne une branche dans un projet utilisant des sous-modules git. Habituellement, lorsqu'il y a un conflit, il y a deux séries de changements, le leur et le nôtre. La résolution des conflits consiste à fusionner ces deux en un. Mais je remarque que pour les sous-modules git la diff montre une troisième valeur:Trois références de validation lors de la fusion de sous-modules

diff --cc my_submodule 
index dd7404e,e6753b1..0000000 
--- a/my_submodule 
+++ b/my_submodule 
@@@ -1,1 -1,1 +1,1 @@@ 
- Subproject commit dd7404e5f35ee0b0064f0d6ed8201cc39d6ed6b2 
-Subproject commit e6753b1142cf0350608720ff23f7ecf51b813cd9 
++Subproject commit 3b4e75fbb7c55cf21e19509bbbbfabfa1fc10630 

Que signifient les « - », « - » et « ++ » signifie

Notez qu'il est possible que la version sous-module en fait vérifié dans le dépôt avant la fusion était ni leur, ni la nôtre, ce que cela explique les trois hash?

Répondre

1

cela signifie simplement le sous-module gitlink (le special entry in the index of the parent repo) a été changé à la fois source et destination.
(Voir git diff man page)

++ signifie une ligne qui a été ajoutée ne semble pas dans les deux Branch1 ou succursale2

De Git Tools - Advanced Merging:

Vous avez trois SHA1 parce que dans un conflit, Git stocke toutes ces versions dans l'index sous "étapes" qui ont chacun des numéros associés à eux.

  • étape 1 est l'ancêtre commun,
  • étape 2 est votre version et
  • étape 3 est de la MERGE_HEAD, la version que vous fusionnez dans (« leur »).

La combined diff format section a tous les détails:

Lorsque le montre git diff-files -c (combiné diff de fichiers fusionnés), il compare les deux parents, fusion non résolues avec le fichier d'arbre de travail

C'est à dire

  • file1 est l'étape 2 aka "notre version",
  • file2 est l'étape 3 alias "leur version".

Un personnage - dans la colonne N signifie que la ligne apparaît dans fileN mais il ne semble pas dans le résultat.
Un personnage + dans la colonne N signifie que la ligne apparaît dans le résultat, et fileN n'a pas cette ligne »

Dans votre cas.

  • A - dans le premier moyen de colonne file1, ce qui signifie étape 2, ce qui signifie "notre" version.
  • Un dans la deuxième colonne signifie file2, ce qui signifie l'étape 3, ce qui signifie "leurs".
  • A « ++ », une addition qui n'a pas été en file1 ou 2 (chaque fois par rapport à l'ancêtre commun de l'étape 1)
+0

Qu'est-ce que cela signifie que cela a changé dans la source? En comparant à quoi? Changements locaux? Dans cet exemple particulier que SHA1 est à nous, avec "-" ou "-"? – Amiramix

+0

@Amiramix comparant à l'ancêtre commun. – VonC

+0

@Amiramix Voir https://git-scm.com/docs/git-diff#_combined_diff_format: Lorsqu'elle est montrée par 'git diff-files -c' (diff combinée de fichiers fusionnés), elle compare les deux parents de fusion non résolus avec le fichier de l'arbre de travail (ie fichier1 est l'étape 2 aka "notre version", fichier2 est l'étape 3 aka "leur version"). – VonC