Git Debugging: blame e bisect. E comando tag
Introdução[editar | editar código-fonte]
Durante a produção de software é muito comum a inserção de bugs. E a probabilidade de isso acontecer aumenta, caso o projeto possua um time grande. Quando isso acontece, muitas vezes é difícil reconhecer o que está errado no código-fonte. Essa busca acaba se tornando cara, pois leva tempo. Para evitar o desperdício de tempo o Git traz algumas ferramentas de depuração que auxiliam nessa caçada: os comandos blame e bisect.
Git Blame: Quem Foi?[editar | editar código-fonte]
Às vezes há a necessidade de saber o porquê que um determinado trecho de código foi alterado. Isso é explicado no texto do commit, no entanto, essa informação fica difícil de ser encontrada, principalmente em projetos grande, onde a pilha de commits cresce rápido. Para situações como essa foi criado o comando blame. Essencialmente, a definição para esse comando é a seguinte:
git blame Comando de depuração que mostra o autor e revisão de cada modificação do arquivo, linha por linha.
Uso Básico: Um Exemplo[editar | editar código-fonte]
Suponha que você esteja num projeto simples, que envolve a criação de um programa que faz as quatro operações matemáticas básicas. Ao abrir o código-fonte uma função chama a atenção:
int div( int dividend, int divider ) { int quotient = 0; if( divider != 0 ) { quotient = dividend/divider; } else { quotient = -1; } return quotient; }
"Por que fazer a verificação antes de efetivamente fazer a divisão"?
Para isso utiliza-se do comando blame
para identificar qual o commit que alterou essa linha. Para isso, usa-se a seguinte linha de comando:
$ git blame arquivo
O resultado para essa função em específico é esse:
38a056ad (TomazMartins 2016-03-21 17:22:21 -0300 45) int div( int dividend, int divider ) 38a056ad (TomazMartins 2016-03-21 17:22:21 -0300 46) { 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 47) int quotient = 0; 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 48) 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 49) if( divider != 0 ) 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 50) { 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 51) quotient = dividend/divider; 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 52) } else 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 53) { 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 54) quotient = -1; 76f678d5 (Thaiane Braga 2016-03-21 17:26:30 -0300 55) }
A partir disso, é possível buscar pela hash que identifica o commit e saber o porquê dessa alteração, caso isso esteja esclarecido na mensagem de commit. Caso não, basta entrar em contato com o autor dessa alteração para esclarecimentos.
Uso Avançado[editar | editar código-fonte]
Algumas opções úteis oferecidas pelo blame
são indicadas abaixo:
Não quero saber o autor, apenas o commit[editar | editar código-fonte]
Para isso, basta usar o seguinte comando:
$ git blame -s arquivo
Assim, o git vai suprimir o autor e o timestamp' da mensagem.
Arquivo grande demais, quero o blame para parte dele apenas[editar | editar código-fonte]
Use o seguinte comando:
$ git blame -L linha-inicial,linha-final arquivo
Assim, o git vai mostrar a mensagem apenas para o intervalo de linhas passado para ele como parâmetro. Por exemplo, quer-se apenas saber sobre as linhas 456 e 470, então usa-se $ git blame -L 456,470 arquivo
.
Não quero saber sobre as alterações em linhas brancas[editar | editar código-fonte]
Usa-se a opção:
$ git blame -w arquivo
O git irá suprimir as mensagens relativas a alterações em linhas em branco.