4 pontos por GN⁺ 2024-11-10 | 2 comentários | Compartilhar no WhatsApp
  • Ferramenta para resolver conflitos de merge do Git, entendendo a árvore dentro do arquivo para conciliar de forma harmoniosa as necessidades dos dois lados
  • É possível adicionar novas linguagens de forma declarativa
  • Pode ser configurado para usar o Mergiraf no lugar do algoritmo de merge padrão do Git
    • Melhora comandos do Git como merge, revert, rebase e cherrypick
  • Ou é possível manter o comportamento original do Git e chamar o Mergiraf manualmente quando ocorrer um conflito.

Objetivos do Mergiraf

  • Não esconder conflitos
    • Heurísticas de merge com reconhecimento de sintaxe às vezes podem considerar, de forma otimista demais, que um conflito foi resolvido
    • O Mergiraf preserva o melhor estado possível mantendo marcadores de conflito no arquivo em casos duvidosos
    • Se tiver resolvido todos os conflitos por conta própria, recomenda revisar o trabalho de mediação com o comando mergiraf review
    • Se a mesclagem parecer incorreta, é possível reportá-la facilmente com mergiraf report
  • Rápido o suficiente para uso interativo
    • Girafas podem correr a 60 quilômetros por hora
    • O trabalho de mesclar versões divergentes de um arquivo acontece com frequência no dia a dia, muitas vezes sem que se perceba, desde que não haja conflitos
    • O Mergiraf busca ser rápido para não atrapalhar o fluxo de trabalho
  • Aberto a outros métodos
    • Em muitos casos, o merge baseado em linhas funciona bem e não exige manipulação de árvore
    • Se não houver conflitos no merge baseado em linhas, o Mergiraf retorna esse merge (muito rápido)
    • Se o merge baseado em linhas gerar chaves duplicadas, o Mergiraf faz um pouco de trabalho extra para resolver o problema ou destacá-lo com marcadores de conflito

2 comentários

 
2147483647 2024-11-11

As girafas conseguem correr a 60 quilômetros por hora.

 
GN⁺ 2024-11-10
Comentários do Hacker News
  • Está trabalhando em algo semelhante ao SemanticDiff e está enfrentando problemas ao usar tree-sitter e GumTree

    • O tree-sitter foi feito principalmente para realce de sintaxe, então é difícil fazer uma análise sintática precisa quando o código é modificado
    • O GumTree fornece resultados rápidos, mas frequentemente retorna correspondências incorretas
    • Está migrando para uma abordagem baseada em Dijkstra e obtendo resultados melhores
  • A seção de arquitetura do Mergiraf explica em profundidade como uma ferramenta complexa funciona

  • O motivo de escolher uma girafa é que, por causa da altura, ela pode ver longe e tem o maior coração entre os mamíferos terrestres

  • É crítico em relação à alegação de que, em algumas inserções, a ordem não importa

    • No nível da linguagem, a ordem pode não importar, mas para humanos uma ordem específica pode ser importante
    • Como exemplo, entre struct Foo; struct Bar; da Base, a Left insere impl Foo { } e a Right insere struct Baz;, e o computador não consegue perceber a diferença
  • Vê com bons olhos o desenvolvimento de um driver de merge para o Git

    • O merge 3-way padrão não entende a linguagem e pode causar problemas
    • Em código Python, se dois branches diferentes removerem print distintos, o resultado pode se tornar código inválido
  • Ferramentas com reconhecimento sintático têm dificuldades quando a equipe estende a linguagem base para se adequar ao problema

    • Menciona casos de uso de macros do Rust ou de "go generate"
  • É uma ideia que pode ajudar a resolver conflitos relacionados à formatação automática

    • Pergunta-se se é possível detectar conflitos semânticos causados por movimentação de código
  • Pretende experimentar o Mergiraf e já o usa junto com git-absorb

    • Seria ótimo se as duas ferramentas funcionassem perfeitamente ou fossem integradas oficialmente ao Git
  • O suporte a Python parece que seria útil

    • A AST baseada em indentação do Python parece funcionar bem
  • O suporte a linguagens é limitado, mas espera que mais linguagens sejam adicionadas