Git
Português (Brasil) ▾ Topics ▾ Latest version ▾ git-blame last updated in 2.24.0

NOME

git-blame - Mostra que revisão e autor modificou pela última vez cada linha de um arquivo

SINOPSE

git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
	    [-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
	    [--ignore-rev <rev>] [--ignore-revs-file <file>]
	    [--progress] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>..<rev>]
	    [--] <file>

DESCRIÇÃO

Anota cada linha no arquivo fornecido com informações da revisão que modificou a linha pela última vez. Opcionalmente, comece anotando a partir da revisão dada.

Quando especificado uma ou mais vezes, -L restringe a anotação às linhas solicitadas.

A origem das linhas é automaticamente seguida em renomeações de todo o arquivo (atualmente não há opção para desativar o renomeamento). Para seguir linhas movidas de um arquivo para outro, ou para seguir linhas que foram copiadas e coladas de outro arquivo, etc., veja as opções -C e` -M`.

O relatório não informa nada sobre linhas que foram eliminadas ou substituídas; você precisa usar uma ferramenta como "git diff" ou a interface "pickaxe" brevemente mencionada no parágrafo seguinte.

Além de suportar a anotação de arquivos, o Git também suporta a pesquisa do histórico de desenvolvimento para quando um trecho de código ocorreu em uma alteração. Isso permite acompanhar quando um snippet de código foi adicionado a um arquivo, movido ou copiado entre arquivos e, eventualmente, excluído ou substituído. Ele funciona procurando por uma string de texto no diff. Um pequeno exemplo da interface da pickaxe que procura por blame_usage:

$ git log --pretty=oneline -S'uso_de_responsabilidade'
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <arquivo-de-ancestralidade>
ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Faça a saída

OPÇÕES

-b

Mostrar SHA-1 em branco para confirmações de commits. Isso também pode ser controlado através da opção de configuração blame.blankboundary.

--root

Não trate commits raíz como fronteiras. Isso pode ser controlado via a opção de configuração blame.showRoot .

--show-stats

Inclui estatísticas adicionais no fim da saída do comando blame.

-L <começo>,<fim>
-L :<nome da função>

Anota apenas a variação da linha dada. Pode ser espeficado várias vezes. É permitido sobrepor as variações.

<começo> e <fim> são opcionais. ``-L <começo>" ou ``-L <começo>," toma do <começo> até o fim do arquivo. ``-L <fim>" toma do começo do arquivo até <fim>.

Warning

Missing pt_BR/line-range-format.txt

See original version for this content.

-l

Mostra o rev longo (Padrão: desligado).

-t

Mostra o tempo de forma crua (Padrão: desligado).

-S <arquivo-revs>

Use revisões do arquivo-revs no lugar de chamar git-rev-list[1].

--reverso <rev>..<rev>

Caminhe para a frente em vez de para trás. Em vez de mostrar a revisão em que uma linha apareceu, isso mostra a última revisão em que uma linha existiu. Isso requer um intervalo de revisão como START..END, onde o path responsável existe em START. --git blame --reverse START is taken as git blame --reverse START..HEAD por conveniência.

-p
--porcelain

Mostra em um formato designado para o consumo de máquina.

--line-porcelain

Mostra o formato porcelain, mas a informação de saída do commit para cada linha, não apenas a primeira vez que o commit é referenciado. Implica --porcelain.

--incremental

Mostra o resultado incrementadamente em um formado designado para o consumo de máquina.

--encoding=<codificação>

Especifica o encoding usado para a saída dos nomes dos autores e sumários de commit. Setando isso para none faz com que a saída do blame (culpa) não seja convertida. Para maior informação, veja a discussão sobre encoding na página de manual git-log[1].

--contents <arquivo>

Quando <rev> não é especificado, o comando anota as mudanças começando para trás da cópia da árvore de trabalho. Essa flag faz com que o comando pareça estar trabalhando na cópia da árvore de trabalho que tem os conteúdos do arquivo nomeado (especifique - para fazer o comando ler da entrada padrão).

--date <formato>

Especifica o formato usado por datas de saída. Se --date não é dado, o valor da variável de configuração blame.date é usado. Se a variável blame.date não está setada, o formato iso é usado. Para valores suportados, veja a discussão da opção --date em git-log[1].

--[no-]progress

O status de progresso é reportado na saída padrão de erro por padrão quando está anexado a um terminal. Esta flag habilita o relatório de progresso caso não esteja anexado a um terminal. Não use --progress junto com --porcelain ou --incremental.

-M[<num>]

Detectar linhas movidas ou copiadas dentro de um arquivo. Quando um commit move ou copia um bloco de linhas (por exemplo, o arquivo original tem A e B, e o commit muda para B e depois para A), o algoritmo tradicional de culpa percebe apenas metade do movimento e geralmente culpa as linhas que foram movidas para cima (i.e. B) ao pai e atribui a culpa às linhas que foram movidas para baixo (i.e. A) para o commit filho. Com essa opção os dois grupos de linhas são culpados pelos pais executando passagens extras de inspeção.

<num> é opcional mas é o limite inferior do número de caracteres alfa numéricos que o Gif tem que detectar como movendo/copiando em um arquivo o qual ele associa essas linhas ao commit principal. O valor padrão é 20.

-C[<num>]

Em adição a -M, detecta as linhas movidas ou copiadas de outros arquivos que são modificados no mesmo commit. Isso é útil quando você reorganiza o seu programa e move código entre arquivos. Quando essa opção é dada duas vezes, o comando adicionalmente olha para cópias de outros arquivos no commit que o cria. Quando essa opção é dada três vezes, esse comando adicionalmente olha para cópias de outros arquivos em qualquer commit.

<num> é opcional mas ele é o limite inferior no número de caracteres alfa numéricos que o Git tem que detectar como se movendo/copiando entre arquivos para que ele associe essas linha no commit principal. E o valor padrão é 40. Se mais opções que -C são dadas, o argumento <num> do último -C terá efeito.

--ignore-rev <rev>

Ignore changes made by the revision when assigning blame, as if the change never happened. Lines that were changed or added by an ignored commit will be blamed on the previous commit that changed that line or nearby lines. This option may be specified multiple times to ignore more than one revision. If the blame.markIgnoredLines config option is set, then lines that were changed by an ignored commit and attributed to another commit will be marked with a ? in the blame output. If the blame.markUnblamableLines config option is set, then those lines touched by an ignored commit that we could not attribute to another revision are marked with a *.

--ignore-revs-file <file>

Ignore revisions listed in file, which must be in the same format as an fsck.skipList. This option may be repeated, and these files will be processed after any files specified with the blame.ignoreRevsFile config option. An empty file name, "", will clear the list of revs from previously processed files.

-h

Mostra a mensagem de ajuda.

-c

Use o mesmo modo de saída que o linkgit:git-anotar [1] (Padrão: fora).

--score-debug

Inclua informações de depuração relacionadas ao movimento de linhas entre arquivos (consulte -C) e linhas movidas dentro de um arquivo (consulte -M`). O primeiro número listado é a pontuação. Esse é o número de caracteres alfanuméricos detectados como tendo sido movidos entre ou dentro dos arquivos. Isso deve estar acima de um certo limite para git blame considerar essas linhas de código que foram movidas.

-f
--show-name

Mostrar o nome do arquivo no commit original. Por padrão, o nome do arquivo é mostrado se houver alguma linha que tenha vindo de um arquivo com um nome diferente, devido à renomeação da detecção.

-n
--show-number

Mostrar o número da linha no commit original (padrão: off).

-s

Suprima o nome do autor e o registro de data e hora da saída.

-e
--show-email

Mostrar o email do autor em vez do nome do autor (Padrão: desativado). Isso também pode ser controlado através da opção de configuração blame.showEmail.

-w

Ignore os espaços em branco ao comparar a versão dos pais e a criança para descobrir de onde vieram as linhas.

--abrev=<n>

Em vez de usar os dígitos hexadecimais padrão 7+1 como o nome do objeto abreviado, use <n>+1 dígitos. Observe que 1 coluna é usada para um acento circunflexo para marcar a confirmação de limite.

O FORMATO PORCELANA

Nesse formato, cada linha é enviada após um cabeçalho; o cabeçalho no mínimo tem a primeira linha que tem:

  • 40-byte SHA-1 do commit da linha é atribuído a;

  • o número da linha da linha no arquivo original;

  • o número da linha da linha no arquivo final;

  • em uma linha que inicia um grupo de linhas de um commit diferente do anterior, o número de linhas neste grupo. Nas linhas subsequentes, este campo está ausente.

Esta linha de cabeçalho é seguida pelas seguintes informações pelo menos uma vez para cada commit:

  • o nome do autor ("autor"), email ("autor-mail"), time ("autor-time") e fuso horário ("autor-tz"); da mesma forma para o committer.

  • o nome do arquivo no commit ao qual a linha é atribuída.

  • a primeira linha da mensagem de log de confirmação ("resumo").

O conteúdo da linha real é gerado após o cabeçalho acima, prefixado por uma TAB. Isso permite adicionar mais elementos de cabeçalho posteriormente.

O formato de porcelana geralmente suprime informações de confirmação que já foram vistas. Por exemplo, duas linhas que são responsabilizadas para a mesma confirmação serão mostradas, mas os detalhes dessa confirmação serão mostrados apenas uma vez. Isso é mais eficiente, mas pode exigir que mais estado seja mantido pelo leitor. A opção --line-porcelain pode ser usada para gerar informações completas de commit para cada linha, permitindo um uso mais simples (mas menos eficiente) como:

conta o número de linhas atribuídas a cada autor

git culpar arquivo de --linha-porcelana |
sed -n 's/^autor //p' |
ordenar | uniq -c | ordenar -rn

ESPECIFICANDO FAIXAS

Ao contrário de git blame e git annotate em versões mais antigas do git, a extensão da anotação pode ser limitada a ambos os intervalos de linha e de revisão. A opção -L, que limita a anotação a um intervalo de linhas, pode ser especificada várias vezes.

Quando você estiver interessado em encontrar a origem para as linhas 40-60 do arquivo foo, você pode usar a opção` -L` assim (eles significam a mesma coisa - ambos pedem 21 linhas iniciando na linha 40):

git responsabilidade -L 40,60 foo
git responsabilidade  -L 40,+21 foo

Além disso, você pode usar uma expressão regular para especificar o intervalo de linha:

git responsabilidade -L '/^sub olá {/,/^}$/' foo

que limita a anotação ao corpo da sub-rotina hello.

Quando você não está interessado em mudanças mais antigas que a versão v2.6.18, ou em mudanças anteriores a 3 semanas, você pode usar especificadores de intervalo de revisão similares a git rev-list:

git responsabilidade v2.6.18.. -- foo
git responsabilidade --desde=3.semanas -- foo

Quando os especificadores de intervalo de revisão são usados para limitar a anotação, as linhas que não foram alteradas desde o limite de intervalo (seja a confirmação v2.6.18 ou a confirmação mais recente com mais de 3 semanas no exemplo acima) são responsabilizadas por esse limite de intervalo commit.

Uma maneira particularmente útil é verificar se um arquivo adicionado possui linhas criadas por copiar e colar de arquivos existentes. Às vezes, isso indica que o desenvolvedor estava sendo malfeito e não refatorou o código corretamente. Você pode primeiro encontrar o commit que introduziu o arquivo com:

git log --diff-filtro=A --pretty=short -- foo

e então anote a mudança entre o commit e seus pais, usando a notação commit ^!:

git responsabilidade -C -C -f $commit^! -- foo

SAÍDA INCREMENTAL

Quando chamado com a opção --incremental, o comando gera o resultado conforme ele é construído. A saída geralmente irá falar sobre linhas tocadas por commits mais recentes primeiro (ou seja, as linhas serão anotadas fora de ordem) e destina-se a ser usado por visualizadores interativos.

O formato de saída é semelhante ao formato Porcelain, mas não contém as linhas reais do arquivo que está sendo anotado.

  1. Cada entrada de culpa sempre começa com uma linha de:

    <40-byte hex sha1> <fonte-linha> <result-linha> <num_linha>

    Os números de linha contam a partir de 1.

  2. A primeira vez que um commit é exibido no fluxo, ele contém várias outras informações sobre ele impressas com uma tag de uma palavra no início de cada linha, descrevendo as informações adicionais de confirmação (autor, email, committer, datas, resumo, etc. .

  3. Ao contrário do formato Porcelana, as informações do nome do arquivo são sempre dadas e terminam a entrada:

    "nome-do-arquivo" <espaço-em-branco-quoted-nomed-do-arquivo-vai-aqui>

    e, portanto, é realmente muito fácil analisar algum analisador de linha e palavra (que deve ser bastante natural para a maioria das linguagens de script).

    Note
    Para as pessoas que fazem análise: para torná-lo mais robusto, simplesmente ignore quaisquer linhas entre a primeira e a última (linhas "<sha1>" e "nome do arquivo") onde você não reconhece as palavras da tag (ou se preocupa com aquela em particular) no início das linhas de "informações estendidas". Dessa forma, se houver alguma informação adicionada (como a codificação de commit ou comentário de commit estendido), um visualizador de culpa não se importará.

AUTORES DE MAPEAMENTO

Warning

Missing pt_BR/mailmap.txt

See original version for this content.

VEJA TAMBÉM

GIT

Parte do git[1] suite