Como o diff / patch funciona e quão seguros eles são?

Sobre como eles funcionam, eu estava pensando em coisas de trabalho de baixo nível:

O que desencadeará um conflito de mesclagem?O contexto também é usado pelas ferramentas para aplicar o patch?Como eles lidam com alterações que não modificam o comportamento do código-fonte? Por exemplo, trocando locais de definição de função.

Com relação à segurança, verdade seja dita, o enorme repositório de kernel do Linux é um testemunho de sua segurança. Mas eu me pergunto sobre os seguintes pontos:

Existem advertências / limitações em relação às ferramentas que o usuário deve conhecer?Foi comprovado que os algoritmos não geram resultados errados?Caso contrário, existem implementações / documentos que propõem testes de integração que pelo menos provam que estão empiricamente livres de erros? Algo como o conteúdo desses papéisBrianKorver eJamesCoplien.Novamente, o repositório Linux deve ser suficiente em relação ao ponto anterior, mas eu estava pensando em algo mais genérico. O código-fonte, mesmo quando alterado, não muda muito (principalmente por causa do algoritmo implementado e das restrições de sintaxe), mas a segurança pode ser generalizada para arquivos de texto genéricos?Editar

Ok pessoal, estou editando, pois a pergunta é vaga e as respostas não estão abordando detalhes.

Detalhes do Git / diff / patch

O formato diff unificado, que o Git parece usar por padrão, basicamente produz três coisas: a mudança, o contexto ao redor da mudança e os números de linha pertinentes ao contexto. Cada uma dessas coisas pode ou não ter sido alterada simultaneamente, então o Git basicamente tem que lidar com 8 casos possíveis.

Por exemplo, se linhas foram adicionadas ou removidas antes do contexto, os números das linhas serão diferentes; mas se o contexto e as alterações ainda forem as mesmas, o diff poderá usar o próprio contexto para alinhar os textos e aplicar o patch (não sei se isso realmente acontece). Agora, o que aconteceria nos outros casos? Gostaria de saber detalhes de como o Git decide aplicar as alterações automaticamente e quando decide emitir um erro e permitir que o usuário resolva o conflito.

Confiabilidade

Tenho certeza de que o Git é totalmente confiável, pois possui o histórico completo de confirmações e pode atravessar o histórico. O que eu gostaria é de algumas dicas para pesquisas acadêmicas e referências sobre isso, se elas existirem.

Ainda meio relacionado a esse assunto, sabemos que o Git / diff trata os arquivos como arquivos de texto genéricos e trabalha em linhas. Além disso, o algoritmo LCS empregado pelo diff gerará um patch tentando minimizar o número de alterações.

Então, aqui estão algumas coisas que eu gostaria de saber também:

Por que o LCS é usado em vez de outros algoritmos de métrica de string?Se o LCS for usado, por que não usar versões modificadas da métrica que levem em consideração os aspectos gramaticais do idioma subjacente?Se uma métrica que leve em consideração os aspectos gramaticais for usada, eles podem fornecer benefícios? Os benefícios nesse caso podem ser qualquer coisa, por exemplo, um "registro de culpa" mais limpo.

Novamente, esses podem ser tópicos enormes e artigos acadêmicos são bem-vindos.

questionAnswers(3)

yourAnswerToTheQuestion