Como devo entender que as condições para mesclar por diff3 sejam bem definidas?

0

No manual do diffutils

diff3 mine older yours

You can remember the order of the arguments by noting that they are in alphabetical order.

You can think of this as subtracting older from yours and adding the result to mine, or as merging into mine the changes that would turn older into yours. This merging is well-defined as long as mine and older match in the neighborhood of each such change. This fails to be true when all three input files differ or when only older differs; we call this a conflict. When all three input files diff er, we call the conflict an overlap.

...

The ‘-e’, ‘-3’ and ‘-x’ options select only unmerged changes, i.e. changes where mine and yours differ; they ignore changes from older to yours where mine and yours are identical, because they assume that such changes have already been merged.

O que significa "meu e mais velho na vizinhança de cada mudança"?

Será que "quando apenas o mais antigo difere" significa que o meu e o seu são iguais, mas diferentes dos mais antigos? Não está se fundindo de forma direta em que podemos usar o meu ou o seu? Por que a fusão não está bem definida neste caso?

Como os três casos cobrem todos os possíveis casos:

  • Quando "meu e mais velho coincidem com a vizinhança de cada alteração"

  • "quando todos os três arquivos de entrada forem diferentes"

  • "quando apenas mais antigo difere"?

São "alterações de mais antigas para as suas, onde a minha e a sua são idênticas", o mesmo que as alterações "quando apenas as mais antigas diferem"?

Obrigado.

    
por Tim 09.11.2018 / 17:59

2 respostas

3

What does "mine and older match in the neighborhood of each such change" mean?

"meus e mais velhos se encaixam na vizinhança de cada mudança" significa que, ao considerar cada alteração entre "mais antiga" e "sua", o contexto da mudança também pode ser encontrado em "meu". Em outras palavras, significa que “meu” e “mais velho” são idênticos no que diz respeito a cada mudança individual entre “mais velho” e “seu”. Considere

mine            other           yours
------------------------------------------------
Some text       Some text       Some text
Some more text  Some more test  Changed text
Continues       Continues       Continues
Mine changes    This is gone    This is gone
The file ends   The file ends   The file ends

Uma linha mudou entre "outra" e "minha" e outra mudou entre "outra" e "sua". Ao olhar para a mudança de “outro” para “seu”, encontramos o mesmo contexto em “meu”, de modo que a mudança pode ser aplicada a “meu” sem ambigüidade ou conflito.

Does "when only older differs" mean that mine and yours are the same but different from older?

Sim.

Isn't merging straightforward in that we can just use either mine or yours? Why isn't merging well-defined in this case?

A definição de "bem definido" é que o contexto da mudança de "mais antigo" para "seu" é idêntico em "meu". Quando "meu" e "seu" são idênticos e diferem de "mais antigos", então, por definição, a alteração não está bem definida.

Isso pode parecer surpreendente, mas o princípio orientador das fusões de três vias é que qualquer conflito, mesmo que resulte em conteúdo idêntico, deve ser identificado e examinado pelo usuário. Eu não tenho um exemplo para entregar, mas acontece que uma determinada linha é idêntica em "meu" e "seu", mas dadas outras mudanças que estão sendo fundidas, não é desejável como está no resultado da mesclagem. / p> Outra maneira de considerar isso é que o objetivo de uma fusão de três vias é conciliar duas histórias divergentes: a história que levou de "mais velha" a "minha" e a história que levou de "mais velha" a "mais velha". Sua". Mesmo que ambas as histórias levem ao mesmo conteúdo, elas precisam ser reavaliadas e não aplicadas cegamente.

Os desenvolvedores de diff3 perceberam que tais mudanças devem ser aplicadas de qualquer maneira; as opções -e , -3 e -x fazem isso.

How do the three cases cover all the possible cases?

O primeiro caso descreve uma análise global, mas acho que os outros dois devem ser entendidos no contexto de uma única mudança. Se considerarmos todos os três casos vistos por mudança (de “mais antigos” para “seus”), eles se tornam (lembre-se “mais velhos” e “seus” são diferentes):

  • “meu” e “mais antigo” são idênticos
  • "meu" e "mais velho" são diferentes, e "meu" e "seu" são diferentes
  • “meu” e “mais velho” são diferentes, e “meu” e “seu” são idênticos

Considere a tabela de verdade:

mine == older    mine == yours    older == yours    Case
--------------------------------------------------------
     Yes              Yes               Yes         N/A
     Yes              Yes               No          Imp.
     Yes              No                Yes         N/A
     Yes              No                No          1
     No               Yes               Yes         N/A
     No               Yes               No          3
     No               No                Yes         N/A
     No               No                No          2

N / A significa que o caso não é considerado: não há alteração de "mais antigo" para "seu". Criança levada. significa que o caso é impossível (através da transitividade da igualdade). Isso mostra que três casos são suficientes para cobrir todas as possibilidades.

Is "changes from older to yours where mine and yours are identical" the same as the changes "when only older differs"?

Sim.

    
por 09.11.2018 / 18:17
1

Ele está bem definido em cada um dos mine e yours é uma alteração de older , de modo que eles removem texto; adicione texto em um lugar diferente; ou eles mudam o texto, mas não alteram o mesmo texto.

Isso é o computador não pode saber o que é desejado se nós dois mudar a mesma coisa (de maneiras diferentes), ou se adicionarmos algo no mesmo lugar, então não sabe em que ordem colocá-los.

    
por 09.11.2018 / 18:19

Tags