Pergunta

Estou prestes a mover uma tonelada de arquivos em um projeto existente. Antes de fazer isso, gostaria de ter uma compreensão firme de algumas técnicas usadas para analisar o código que tem uma história de vários arquivos.

Como posso usar o Git para perguntar: "De onde veio essa linha de código?" Quando o conteúdo passou por vários arquivos em sua vida?

Eu sei que o Git não rastreia renomeamentos explicitamente (por um bom motivo), então parece que eu deveria poder perguntar isso, só não tenho certeza de como. Se houver métodos para visualizar isso, seria ótimo saber também.

Foi útil?

Solução

Eu recomendaria olhar para três ferramentas na caixa de ferramentas Git. O primeiro é a culpa, que é a mesma delas no CVS. Ele mostra que comprometeu a última vez que tocou cada linha em um arquivo. Se você quiser ver o que estava lá antes, poderá aceitar a confirmação que tocou a linha e observe o compromisso anterior.

git show <sha1_of_interesting_commit>^ -- file/path

Você pode repetir a culpa para ver o que aconteceu antes disso.

git blame <sha1_of_interesting_commit>^ -- file/path

A segunda ferramenta está usando --follow Para rastrear os arquivos renomeiros anteriores.

git log --follow -- file/path

A terceira - e possivelmente a ferramenta mais útil - é a opção de picareta para registrar. Isso pesquisa o histórico de alterações nas linhas removidas, introduzidas ou alteradas que incluem um determinado pedaço de texto. Isso é especialmente útil para rastrear coisas como nomes de funções. Pode ser novo em um arquivo em uma determinada confirmação, mas veio de um arquivo de origem diferente? Foi adicionada uma ligação ao mesmo tempo ou antes de se mudar?

git log -S"Interesting_Function"

Se você estiver usando um patch ou opção de estatística (por exemplo -p ou --stat) A saída será restrita àqueles arquivos cujas mudanças realmente envolveram a sequência de pesquisa, a menos que você também use --pickaxe-all onde toda a mudança é exibida.

Combinado com git grep Para mostrar onde estão todas as ocorrências atuais de uma string, o pickaxe é uma ferramenta de mineração de histórico extremamente útil.

Outras dicas

git blame É o que você usaria para perguntar "De onde veio essa linha de código?". Não sei se isso lida com renomeamentos. Provavelmente faz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top