Разобрать git log по измененным файлам

Мне сказали сделать git-сообщения для каждого измененного файла одной строкой, чтобы я мог использовать grep, чтобы найти все изменения в этом файле. Например:

$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......

Это здорово, но тогда реальную строку труднее читать, потому что она либо убегает с экрана, либо оборачивается, оборачивается и оборачивается.

Если я хочу сделать сообщения вроде этого:

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

есть хороший способ затем использовать grep или cut или какой-либо другой инструмент для получения показаний вроде

$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......
1
задан 28 May 2014 в 13:08

1 ответ

Если вывод grep команда показывает как это,

$ 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......

Тогда можно передать его по каналу к ниже команды awk для создания желаемого вывода,

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

Пример:

$ 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......
0
ответ дан 28 May 2014 в 13:08

Другие вопросы по тегам:

Похожие вопросы: