Eu amo undo-tree
(captura de tela abaixo). Ele fornece uma maneira fácil para navegar através de diferentes versões de um arquivo (janela superior), permitindo que o usuário move em torno da árvore história do arquivo em uma janela separada (janela inferior) com chaves simples, como n
, p
e C-b
e C-f
para alternar através descendentes da mesma pai.
Mais notavelmente, undo-tree
atualiza o buffer que contém o arquivo com a versão correspondente com base na seleção na exibição em árvore, automaticamente.
Obviamente, magit
é fenomenal para o git, e seria incrível se tivesse uma capacidade semelhante, ou seja, permitir que os usuários navegassem de maneira interativa no histórico de git de um arquivo enquanto atualizavam simultaneamente o buffer que mantinha o arquivo automaticamente.
Isso é possível magit
hoje?
fonte
undo-tree
usa uma árvore (está no nome :-p), enquanto a história do Git é um gráfico acíclico direcionado . Pode não ser trivial.Respostas:
Recentemente, o Magit ganhou suporte para algo assim, mas o recurso ainda é um pouco complicado e precisa ser ativado explicitamente.
Um recurso semelhante existe há muito tempo - quando você move de uma confirmação para outra em um buffer de log e outra janela no mesmo quadro é o buffer de revisão do repositório, esse buffer é atualizado para mostrar a confirmação em vez de qualquer confirmação. estava mostrando anteriormente.
Até muito recentemente, o buffer de revisão era criado quando você passou de um commit para outro. Eu mudei esse comportamento e agora o buffer de revisão é sempre atualizado . Se nenhuma janela no mesmo quadro já exibir esse buffer, a movimentação no log não fará mais com que o buffer seja exibido em alguma nova janela ou em uma janela existente que anteriormente exibia outro buffer.
Então agora você precisa pressionar SPCuma vez para exibir o buffer de revisão. Somente então ele começará a ser atualizado quando você mover o buffer de log.
Se você não deseja que o buffer de revisão seja atualizado, faça o seguinte:
Se, por outro lado, você também deseja que o buffer de revisão seja atualizado ao se mover no buffer de status, use o seguinte:
Agora é possível que um buffer de blob seja atualizado automaticamente de maneira semelhante. Primeiro adicione isto:
E talvez também:
Em seguida, dentro de um buffer de log (ou status), pressione RETpara exibir ou atualizar o buffer de revisão e também para alternar para esse buffer. Vá para o arquivo do seu interesse e pressione RETnovamente. Agora você está em um buffer de "visita a blob", que é semelhante a um buffer de visita a arquivos, exceto que ele não visita o arquivo na árvore de trabalho, mas o arquivo como estava em alguma confirmação.
Volte para o buffer de log (ou status) e vá para outra confirmação. O buffer de blob está sendo atualizado.
Observe que exibir outro blob na verdade não reutiliza o buffer de blob existente. Em vez disso, cria um novo buffer que visita esse blob e exibe esse buffer na janela que exibia anteriormente o outro buffer de blob. Esse outro buffer não está sendo excluído, o que infelizmente significa que muitos buffers podem se acumular em um curto período de tempo. Qual seria uma dessas arestas, como mencionei anteriormente. Pressionar qum buffer de blob o exclui, portanto, você pode limpar indo para a janela que foi usada para exibir os vários buffers de blob e continuar pressionando qaté que todos os buffers tenham sido excluídos.
Além disso, é possível navegar para o blob seguinte ou anterior a partir de um buffer de blob usando pe n. Presumo que, na maioria dos casos, você comece com um blob recente e depois volte para os blobs mais antigos usando p. Se você fizer isso e quiser seguir na outra direção, recomendo que você use qpara eliminar o buffer atual e, assim, passar para o buffer anterior, ou seja, o próximo blob.
Observe também que você não precisa primeiro visitar uma revisão para poder visitar um blob. Você também pode usar
M-x magit-find-file RET <revision> RET <file> RET
diretamente, mas acho isso menos conveniente.fonte
20151014.231
(o mais recente possível). Tentei seguir os passos que você descreveu acima. Fui paramagit-log-buffer-file
o que me permite navegar pelos commits cima e para baixo comn
ep
mas quando eu pressionarSPC
ouRET
em um deles eu recebo:Symbol's value as variable is void: magit-blame-mode
magit-blame-maybe-update-revision-buffer
amagit-section-movement-hook
por engano.