Como diferencio um buffer de uma revisão?

8

Quero executar o ediff para comparar minha versão atual de um arquivo (no git) com uma versão do arquivo em uma ramificação diferente.

Eu corro M-x ediff-revisionde dentro de um buffer aberto para o arquivo em questão. Eu respondo as duas perguntas:

  • Compare as revisões do arquivo: em branco esta resposta (o padrão é o buffer atual que está correto).
  • Revisão 1 para comparar: aceito o padrão novamente ("versão mais recente do arquivo padrão").
  • Revisão 2 para comparar: insiro um nome de filial git

Isso funciona muito bem para visualizar as diferenças entre os dois arquivos. No entanto, quero poder editar a versão atual (por exemplo, pressionando aou bediff para copiar ou remover blocos de diff) e o buffer da "versão atual" é um buffer somente leitura com um nome fabricado ( file.~git-branch~). Quero que o buffer da "versão atual" seja o buffer de leitura e gravação com o qual comecei, não um buffer somente leitura na versão da ramificação atual.

PT
fonte

Respostas:

7

O Emacs está fazendo o que você disse para fazer, em vez do que você quis dizer. ediff-revisionpede três informações:

  1. O arquivo no qual trabalhar - padrão: o arquivo que o buffer atual está visitando.
  2. A revisão antiga - padrão: a revisão mais recente.
  3. A nova revisão - padrão: o estado atual.

Na etapa 1, você seleciona o arquivo, não diz ao Emacs que deseja usá-lo como está no buffer. O padrão para a etapa 2 é a revisão mais recente, não a cópia de trabalho atual. O padrão para a etapa 3 é o conteúdo do buffer, que é a cópia de trabalho se o buffer não for modificado. Com o que você fez, você está comparando o que fez o check-out (normalmente a revisão mais recente na ramificação atual) com outra ramificação, não a cópia de trabalho com outra ramificação.

Você precisa dar o nome do ramo como a primeira revisão (etapa 2) e deixar a terceira pergunta em branco para dizer que deseja usar o estado do buffer. Você só pode selecionar o estado atual do buffer para a revisão 2, não para a revisão 1 (isso está incorporado ediff-vc-internal).

Gilles 'SO- parar de ser mau'
fonte
7

Ao usar o magit :

  1. Use l -al lpara visualizar as revisões de todas as filiais em seu histórico
  2. vá para a linha que contém a revisão com a qual você deseja comparar o conteúdo atual do buffer.
  3. Digite de você será perguntado em qual revisão comparar a árvore de trabalho atual (o padrão é a revisão no ponto). Confirme.
  4. Você terá uma visão geral diferente das alterações de todas as diferenças de arquivo entre a árvore de trabalho atual e a revisão. Coloque um ponto no arquivo que você está interessado e clique epara chamar uma sessão ediff nele.

O Magit oferece várias opções para exibir as revisões (etapa 1). Você pode escolher Se você possui uma estrutura de ramificação muito complexa, poderá usar um pouco mais de filtragem para encontrar a revisão desejada.

dfeich
fonte
Ótimo! Era exatamente isso que eu estava procurando. Apenas uma coisa ... Como assim -al? Eu normalmente apenas faço l lou l ano buffer de status magit.
Nephewtom 28/03
Isso era para um layout de interface de usuário mais antigo do magit. Nas versões atuais você pode usar l a. O layout do Magit mudou várias vezes nos últimos 3 anos.
dfeich