Analisar o log git por arquivos modificados

1

Fui avisado para fazer mensagens git para cada arquivo modificado em uma única linha, para que eu possa usar o grep para encontrar todas as alterações nesse arquivo. Por exemplo:

$git commit -a
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......

$git log | grep path/to/file.cpp/.h
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......

Isso é ótimo, mas a linha real é mais difícil de ler porque é executada fora da tela ou envolvida, envolvida e envolvida.

Se eu quiser criar mensagens como esta:

$git commit -a
     modified: path/to/file.cpp/.h 
               1) change1 
               2) change2
               etc......

existe uma boa maneira de usar grep ou cut ou alguma outra ferramenta para obter uma leitura como

$git log | grep path/to/file.cpp/.h
     modified: path/to/file.cpp/.h 
               1) change1 
               2) change2
               etc......
     modified: path/to/file.cpp/.h 
               1) change1 
               2) change2
               etc......
     modified: path/to/file.cpp/.h 
               1) change1 
               2) change2
               etc......
    
por MrUser 28.05.2014 / 11:08

1 resposta

0

Se a saída do comando grep aparecer assim,

$ git log | grep path/to/file.cpp/.h
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......

Então você pode canalizá-lo para o comando abaixo awk para produzir a saída desejada,

git log | grep path/to/file.cpp/.h | awk -v RS='[-,]' '{print}'

Exemplo:

$ cat aa
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......
     modified: path/to/file.cpp/.h - 1) change1 , 2) change2, etc......

$ awk -v RS='[-,]' '{print}' aa
     modified: path/to/file.cpp/.h 
 1) change1 
 2) change2
 etc......
     modified: path/to/file.cpp/.h 
 1) change1 
 2) change2
 etc......
     modified: path/to/file.cpp/.h 
 1) change1 
 2) change2
 etc......
    
por Avinash Raj 28.05.2014 / 11:24