Quando faço a git diff
ou a git log -p
, como obtenho os números das linhas do (s) arquivo (s) de origem alinhados com a saída?
Tentei pesquisar man git-diff | grep "line numbers"
e pesquisar no Google, mas não obtive nada rapidamente.
fonte
Quando faço a git diff
ou a git log -p
, como obtenho os números das linhas do (s) arquivo (s) de origem alinhados com a saída?
Tentei pesquisar man git-diff | grep "line numbers"
e pesquisar no Google, mas não obtive nada rapidamente.
git diff
Atualmente não há opções para exibir os números das linhas verticalmente ao lado com git diff
.
Essa informação está disponível nos (c) cabeçalhos de bloco para cada mudança no diff, porém, está apenas no formato de diff unificado :
@@ -start,count +start,count @@
O estado original do arquivo é representado com -
, e o novo estado é representado com +
(eles não significam adições e exclusões no cabeçalho do pedaço. start
Representa o número da linha inicial de cada versão do arquivo e count
representa quantas linhas estão incluídas , começando do ponto inicial.
diff --git a/osx/.gitconfig b/osx/.gitconfig
index 4fd8f04..fcd220c 100644
--- a/osx/.gitconfig
+++ b/osx/.gitconfig
@@ -11,7 +11,7 @@ <== HERE!
[color "branch"]
upstream = cyan
[color "diff"]
- meta = yellow
+ meta = cyan
plain = white dim
old = red bold
new = green bold
O cabeçalho do pedaço
@@ -11,7 +11,7 @@
diz que a versão anterior do arquivo começa na linha 11 e inclui 7 linhas:
11 [color "branch"]
12 upstream = cyan
13 [color "diff"]
14 - meta = yellow
14 + meta = cyan
15 plain = white dim
16 old = red bold
17 new = green bold
enquanto a próxima versão do arquivo também começa na linha 11 e também inclui 7 linhas.
Como você provavelmente pode dizer, o formato de diff unificado não torna fácil descobrir os números das linhas (pelo menos se você não for uma máquina). Se você realmente deseja números de linha que possam ler, você precisará usar uma ferramenta de comparação que os exibirá para você.
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
ou-U0
, no entanto.git diffn
, uma substituição drop-in (invólucro)git diff
que mostra números de linha e tem compatibilidade total com todos os usos e opções degit diff
: stackoverflow.com/questions/24455377/…Aqui estão mais duas soluções, expandindo o código de Andy Talkowski.
Texto simples:
Texto colorido, supondo que
\033[66m
seja o formato dos códigos de cores:O código altera as linhas que começam com
-
e+
para-1:-
e+1:+
, respectivamente, e as linhas que começam com nadapara
(5,6):
. Os números são os números das linhas do respectivo arquivo.fonte
git diff
mantém o alinhamento cuidadosamente. Este código está acima da minha cabeça no momento, então você estaria disposto a corrigi-lo? Em outras palavras, quando uma linha diz+240:+
e a próxima diz(241,257):
, você precisa adicionar alguns espaços extras à linha superior para fazer seu código manter o alinhamento e recuo adequados com o código da linha inferior. Talvez isso pudesse ser feito facilmente com impressão?printf
.git diffn
. Veja aqui: stackoverflow.com/a/61997003/4561887 . Obrigado @PFudd, por sua resposta. Estudei e usei para aprender, então comecei do zero e escrevigit diffn
. Uma vez formatado para que eu pudesse ler seu código (obrigado @EdMorton), pude aprender algumas coisas excelentes que me ajudaram.Aqui está um script que tenta consertar isso - não testei com raiva, mas parece ok. Ele se baseia nos registros que git diff produz e usa awk para manter contagens de linha.
fonte
Você pode usar
git difftool
para fazer a comparação com um editor externo que exibirá os números das linhas. Veja como fazer isso com vim / vimdiff:Defina vimdiff como difftool do git:
Configure
~/.vimrc
para mostrar automaticamente os números de linha ao usar o vimdiff:Execute git difftool, que usará vimdiff com números de linha:
fonte
Uma maneira rápida é usar
git diff -U0
. Isso definirá as linhas de contexto como 0, o que fará com que os valores @@ correspondam às linhas realmente alteradas. Por padrão, os valores @@ incluem 3 linhas de contexto antes / depois, o que não é conveniente para humanos.Exemplo:
É difícil calcular os números das linhas alteradas porque a linha 10 se refere à primeira linha do contexto anterior. O número da linha real da primeira linha alterada é 10 + 3 = 13. Para calcular o número de linhas alteradas, você também deve subtrair o contexto antes e depois: 8-3-3 = 2.
Como você pode ver, definir context = 0 torna os valores @@ mais fáceis de ler. Você pode ver que as linhas alteradas começam na linha 13 e há 2 linhas alteradas.
Isso não é perfeito, pois mostra apenas o número da linha de cada bloco. Se você quiser ver os números de cada linha, use o difftool para um editor externo. Consulte https://stackoverflow.com/a/50049752
fonte
Eu gosto de usar
git difftool
com fusão como o meu difftool. É mais fácil de olhar do quegit diff
, tem uma bela comparação de interface de usuário lado a lado e mostra os números das linhas em cada lado.Configuração:
Captura de tela de amostra:
Atualização de 24 de maio de 2020:
Recentemente, escrevi
git diffn
nos últimos dias para ser um substituto imediato paragit diff
a linha de comando. Dê uma chance. Veja minha outra resposta aqui .fonte
A partir de 24 de maio de 2020, você pode usar a ferramenta de terceiros
git diffn
(divulgação completa: eu a escrevi) para essa finalidade. É um invólucro levegit diff
, escrito naawk
linguagem de programação baseada em padrão / ação. Aqui está um exemplo de resultado da execuçãogit diffn
:Aqui está uma demonstração:
1/3: Demonstração de
git diffn
:Crie este arquivo:
hello_world.c:
Comprometa:
Altere para isto e salve o arquivo:
hello_world.c:
Agora execute:
Aqui está o resultado do
git diff
primeiro para fins de comparação:E uma captura de tela para mostrar a cor. Observe que a seção destacada em vermelho está simplesmente mostrando espaços em branco vazios (espaços neste caso) que podem ser excluídos:
Agora, aqui está o resultado de
git diffn
. Observe que ele mostra todos os números de linha perfeitamente!-
sinal na extrema esquerda E à direita do:
para ajudá-lo a ver melhor - se seus olhos gostam de escanear para a direita do cólon ou para baixo na extremidade esquerda da tela.+
sinal tanto na extrema esquerda quanto à direita de:
.,
.Saída de
git diffn
:E uma captura de tela para mostrar a cor. Observe que os dois pontos NÃO são coloridos ou estilizados para corresponder ao texto ao redor à esquerda e à direita. Este é um comportamento intencional e projetado para agir como um separador visual entre os números de linha adicionados à esquerda e a
git diff
saída original à direita.2/3: O que é?
Do topo de
git-diffn.sh
:DESCRIÇÃO:
git-diffn.sh
um substituto
git diff
instantâneo para o qual também mostra a linha 'n' números! Use-o exatamente comogit diff
, exceto que você verá esses belos números de linha também para ajudá-lo a entender suas alterações.uma vez que é apenas um wrapper leve baseado em linguagem awk
git diff
, ele aceita TODAS as opções e parâmetros quegit diff
aceita. Exemplos:git diffn HEAD~
git diffn HEAD~3..HEAD~2
funciona com qualquer uma das suas
git diff
configurações de cor, mesmo se você estiver usando cores personalizadasVeja minha resposta aqui para saber como definir cores de diff personalizadas, bem como para ver uma captura de tela da saída de cor personalizada de
git diffn
: Como você personaliza a cor do cabeçalho diff no git diff?Aqui estão alguns exemplos de
git config
comandos da minha resposta acima para definirgit diff
cores e atributos personalizados (formatação de texto):entrada
git diffn
, a saída de cores está ativada por padrão; se quiser desabilitar a cor de saída, você deve usar--no-color
ou--color=never
. Vejaman git diff
para detalhes. Exemplos:3/3: Instalação
gawk
. Se assim for, tente este :brew install gawk
.Opção 1 (minha recomendação): baixe todo o repo e, em seguida, crie um link simbólico para o programa para que você possa receber atualizações facilmente fazendo um a
git pull
partir do repo sempre que quiser.Primeiro,
cd
para onde você deseja instalar isso. Então corra:Feito! Agora basta fazer a etapa final abaixo!
Opção 2 (para quem quer apenas 1 arquivo): baixe apenas um arquivo uma vez.
Feito! Agora basta fazer a etapa final abaixo!
Passo final:
Agora feche e reabra o seu terminal, ou re-fonte com
. ~/.bashrc
, e pronto!git diffn
agora funcionará como um substituto exato para ogit diff
!fonte
Podes tentar
no arquivo. Ele mostra o committer, o id do commit e o número da linha para cada linha no arquivo.
fonte
git blame
mostrará apenas o estado atual do arquivo com os números das linhas.git blame
de forma alguma responde à pergunta; Estou muito perplexo com os votos positivos aquiPrimeiro, configure sua ferramenta git diff, por exemplo, Meld
Em seguida, arranque seu difftool em algum arquivo:
Lembre-se de definir o número da linha de acordo com a preferência da ferramenta diff.
fonte