Mercurial, conflito, fusão, conflitos adicionais posteriormente, Mercurial lembra da resolução inicial?

StackOverflow https://stackoverflow.com/questions/4016639

Pergunta

Imagine este cenário:

  1. Alice e Bob clonem um repositório mercurial mestre central, contendo 1 arquivo de texto
  2. Alice e Bob fazem uma alteração na mesma linha no arquivo, e comete
  3. Bob volta para o repositório central, mas não Alice
  4. Alice agora entra em seu repositório, avisa que ela agora tem duas cabeças e funde
  5. Como a mesclagem é um conflito, ela resolve o conflito
  6. Alice então se compromete, mas não empurra
  7. Bob agora faz mais alterações no arquivo, em algum outro local do arquivo (ou seja, nem perto das mudanças iniciais) e cometidos, e empurra
  8. Alice, em seu arquivo mesclado, faz uma mudança semelhante no mesmo local que Bob acabou de mudar e comete
  9. Alice puxa, e descobrindo mais um repositório de cabeça dupla, ela se funde

Aqui está uma visão diferente do cenário acima

(Os números após "mudança" significam que a pessoa mudou "a parte x" do arquivo. Se ambos os usuários mudarem a mesma parte, temos um conflito de mesclagem à frente, se eles mudarem diferente, não tanto)

    Alice                    Bob
    CLONE MASTER             CLONE MASTER
    -----------------------------------------
    CHANGE 1                               <-----+
    COMMIT                                       +-- upcoming merge conflict
    -----------------------------------------    |
                             CHANGE 1      <-----+
                             COMMIT
                             PUSH
    -----------------------------------------
    PULL                                   <-- Bob's change +1 head
    MERGE                                  <-- Attempt to get rid of extra head
    RESOLVE CONFLICT                       <-- Resolve merge conflict
    COMMIT
    -----------------------------------------
                             CHANGE 2      <-----+
                             COMMIT              +-- yet another merge
                             PUSH                |   conflict ahead
    -----------------------------------------    |
    CHANGE 2                               <-----+
    COMMIT
    PULL                                   <-- Bob's change, again +1 head
    MERGE                                  <-- Attempt to get rid of extra head
    RESOLVE ???

Neste ponto, minha pergunta é a seguinte:

  • As ferramentas de fusão levarão em consideração sua primeira resolução de mesclagem? Como Bob nunca puxou as mudanças de Alice, sua cópia ainda está vazia de qualquer uma das mudanças que Alice fez, sua mudança inicial (que estava em conflito com Bob's), sua fusão e sua última mudança, que está em conflito com a última mudança de Bob .

Se eu simplesmente tivesse levado a versão do arquivo de Bob e a versão do arquivo de Alice e foi dada a qualquer programa de mesclagem, ela sinalizaria as duas mudanças como em conflito.

Em outras palavras, a ferramenta de conflito tentará pedir a Alice para resolver o conflito original e o novo, ou apenas o mais recente?

Estou supondo (Eu não tentei isso, ainda tentando criar algum tipo de script de teste para testar este problema) que o Mercurial só solicitará a Alice para resolver o último conflito.

E se eu configurar o Mercurial para usar um programa Dif/Merge de terceiros? Isso ainda se aplicará? Por exemplo, eu configurei minha instalação para usar Sem comparação, os dois arquivos (Bob's com apenas suas mudanças e Alice com suas mudanças + a resolução de mesclagem) serão dados com ou sem a resolução inicial presente? Em outras palavras, se estiver usando Sem comparação, a coisa correta acontecerá aqui também (assumindo que acontece.)

Foi útil?

Solução

O Mercurial exigirá apenas que o conflito mais recente seja resolvido e isso funcionará bem com ferramentas de mudança externa.

Quando Alice faz sua segunda mesclagem, ela está fundindo sua própria mesclagem anterior com o novo delta de Bob e apenas essa mudança precisa ser integrada novamente.

Diagrama realmente claro, btw. Obrigado

Outras dicas

Só pedirá a Alice que mude o conflito mais recente.

A razão para isso é a seguinte:

Ela já mudou 1 de Bob, está em sua história, para que não tente mudar esse código novamente. Funciona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top