Desenvolvimento

28 jun, 2012

Dica Git da semana: procurando commits e alterações

Publicidade

A dica Git desta vez é sobre usar grep para encontrar registros.

No artigo anterior, falei sobre como procurar um conteúdo dos repositórios git com git grep. Nesta segunda parte, veremos como você pode pesquisar os logs de commit isoladamente.

Às vezes, é útil ser capaz de pesquisar através do log de commit para saber quando uma mudança ocorreu. Alguns projetos gostam de incorporar um identificador de bug na mensagem de commit; por exemplo, 1ac0a2 no projeto EGit contém uma referência a Bug: 324736.

Para encontrar isso rapidamente (e sem ter que se referir a um sistema de rastreamento de bugs externo para obter a resposta), podemos usar git log –grep para encontrar a mensagem de commit que corresponde a esse bug em particular.

[EGit] (master)$ git log --oneline --grep="Bug: 324736"
1ac0a29 [historyView] Reveal selected commit on filter change
20c9560 [historyView] Preserve commit selection on filter change

Isso é obviamente útil quando você possui mensagens de commit específicas que incluem o rastreador de bug relacionado, mas não tão útil se você não gravar essas informações com o próprio commit.

Outro caso de uso é quando você quer saber quando uma mudança em particular foi introduzida. Por exemplo, pode haver uma mudança de um arquivo com o table.reveal texto(c);. Normalmente, você pode usar git blame para descobrir a mudança, mas se ela foi adicionada e posteriormente removida, ela pode não estar no arquivo atual a ser mudado. Também pode ter sido adicionada em outros lugares inicialmente, e, em seguida, copiada e colada em outro lugar.

git log tem uma outra característica que pode ser usada para procurar por padrões em deltas. Isso busca efetivamente os patches, e não o conteúdo dos arquivos em si. Por exemplo, se quiséssemos procurar EGit para as mudanças que introduziram a mudança no código acima, então poderíamos executar:

[EGit] (master)$ git log --oneline -Gtable.reveal
1ac0a29 [historyView] Reveal selected commit on filter change
8635f79 Show commit corresponding to selection in commit graph table
390b6b1 Branches and Tags links in commit message viewer
dfbdc45 Initial EGit contribution to eclipse.org

Mesmo que table.reveal não exista mais na base de código atual (e, como tal, o git grep não mostre mais esta frase), usar git log -G permite-nos descobrir quando a alteração foi introduzida (e quando foi removida).

Dessa maneira, o git log -G pode ser usado para pesquisar o histórico de informações potencialmente sensíveis que possam ter sido acidentalmente comitadas no repositório. Pode-se até mesmo criar jobs para garantir que o histórico não contenha informações que não deveriam ter sido comitadas.

?

Texto original disponível em http://alblue.bandlem.com/2011/08/git-tip-of-week-searching-for-commits.html