根据修改的文件解析 git log

根据修改的文件解析 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

如果命令的输出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......

相关内容