Minha recente fusão do Git resultou em um grande número de conflitos. Minha abordagem atual é procurar a próxima ocorrência de '<<<' e executar a mesclagem por edição de texto padrão.
Pergunta : existe uma maneira de o Emacs suportar a fusão usando as informações disponíveis no Git sobre minha versão, sua versão e a versão base do arquivo?
Editar: Esta questão tem um escopo diferente do que esta questão relacionada , uma vez que não se limita a invocar ediff.
e
arquivos mostrados como conflitantes. O Magit seria iniciadoediff
para fazer a mesclagem e solicitaria depois que você confirmasse suas alterações, para poder preparar o arquivo mesclado.smerge
evc-resolve-conflict
, assim como umaediff
) e existe há mais tempo. Concordo que o primeiro tópico poderia usar um título melhor, no entanto.Respostas:
Você pode tentar
smerge-mode
apenas abrir o arquivo em conflito e fazer M-xsmerge-mode
RET. Irá destacar todas as regiões em conflito. Ele também adiciona combinações de teclas para resolver facilmente os conflitos, consulte sua documentação C-hfsmerge-mode
RETpara conhecê-los.Prefixo padrão
Eu acho o prefixo padrão para
smerge-mode
C-c^complicado, então mudei para C-cvKeybindings importantes
Para mim, as ligações mais importantes são:
smerge-next
obrigado a smerge-command-prefixnpassar para o próximo conflito.smerge-previous
obrigado a smerge-command-prefixppassar para o conflito anterior.smerge-keep-current
obrigado a smerge-command-prefixRETmanter a versão em que o cursor está.smerge-keep-mine
obrigado a smerge-command-prefixmmanter suas alterações.smerge-keep-other
obrigado a smerge-command-prefixomanter outras alterações.smerge-ediff
obrigado a smerge-command-prefixEiniciar uma sessão ediff para mesclar os conflitos. É o mesmo quevc-resolve-conflicts
(obrigado @phils e @Malabarba por apontar isso).Ativando o modo de junção automaticamente
ATUALIZAÇÃO: O seguinte é relevante apenas nas versões do Emacs anteriores
25.1
; o seguinte pode causar problemas em versões posteriores, consulte https://github.com/magit/magit/issues/3897Além disso, você pode estar interessado em ativar automaticamente
smerge-mode
ao visitar um arquivo / buffer com marcadores de conflito, pode usar algo como o seguinte para conseguir issoObserve que estou usando
buffer-list-update-hook
e não,find-file-hook
pois na maioria das vezes eu recebo conflitos em um buffer que já está aberto no emacs, caso em quefind-file-hook
não ajuda em nada.Verifique também outros métodos mencionados nesta resposta
fonte
smerge-ediff
. (2) Em qual versão do Emacs você está? No ramo principal do emacs atual, o smerge é ativado automaticamente. (3) Por que você está usando embuffer-list-update-hook
vez defind-file-hook
?smerge-ediff
evc-resolve-conflicts
são a mesma coisa.smerge-mode
as combinações de teclas estão documentadas em sua documentação. Talvez eu possa citar o manual aqui para ser completo. Obrigado pelo feedback. 2) Estou na v24.5, embora às vezes tente o master branch, não me lembro de o smerge ter sido ativado automaticamente (é uma alteração recente?). 3) Isso é porque na maioria das vezes eu fico conflitos em buffers já abertos, caso em que eu precisaria para transformar explicitamentesmerge-mode
smerge-mode
ativado o tempo todo? Talvez não faça muito até ser invocado.Edit: como essa resposta foi mais positiva do que eu esperava, eu a expandi um pouco.
Para complementar a resposta de @IqbalAnsari, você também pode usar
vc-resolve-conflicts
(como mencionado por outros, é um apelido parasmerge-ediff
). Isso iniciará aediff
interface. À esquerda, estará o primeiro pai de mesclagem e o segundo pai de mesclagem, à direita. Eles são rotulados na modelagem comMINE
eOTHER
respectivamente. O buffer mesclado é mostrado abaixo (veja a captura de tela).Combinações de teclas
Você também pode navegar para o buffer mesclado
other-window
e editar manualmente, caso a solução de um conflito seja mais complicada do que aceitar uma versão. Quando terminar, você pode salvar o buffer e sair do Emacs como de costume. Para obter mais ajuda, basta usar ?durante aediff
sessão, há um monte de comandos muito úteis lá. Ainda não sei o que metade deles faz!fonte
C-x v <
, embora, na prática, seja mais provável que eu o invoque com o Magit (conforme comentário de wvxvw).vc-resolve-conflict
é um apelido parasmerge-ediff
, que, como o nome sugere, inicia uma sessão do Ediff, não uma sessão do Emerge. A propósito, o cabeçalho da bibliotecaediff.el
reconheceemerge.el
a influência de s e continua dizendo "A versão atual do Ediff substitui o Emerge. Ele fornece uma interface de usuário superior e possui vários recursos importantes não encontrados no Emerge. Em particular, ele pode fazer correções e Operações de comparação, mesclagem e diretório de arquivos de duas e três vias ".magit-ediff-resolve
(Em
oue
em um arquivo com conflitos) usasmerge-ediff
internamente. No entanto, substitui oediff-quit-hook
para fornecer uma experiência de finalização de sessão um pouco melhor. Em vez de dizer que você pode salvar "o buffer" (existem vários buffers), ele pergunta se você deseja salvar o buffer (enquanto mostra seu nome).Se você usar o Spacemacs, recomendo ativar o "modo transitório de imersão", que exibe um menu de hidra com todos os comandos possíveis de imersão.
Para fazer isso, basta chamar Mx
spacemacs/smerge-transient-state/body
, que é por padrão atribuídoSPC-g-r
.Aqui está uma captura de tela:
A edição do seu arquivo deve ser intuitiva:
n
para ir para o próximo pedaço.fonte