使用git识别修订版中的所有修改函数

时间:2011-04-19 19:13:58

标签: git function diff history revision

有没有一种好方法可以使用git识别历史记录中每个修订版中的所有修改过的函数?我尝试过使用-p开关,但它似乎与svn的show-c-function参数的工作方式不同。

我的假设是我想要使用“git diff HEAD~i HEAD~i-1 -p”来增加i的值。我是否遗漏了一些参数,这些参数有助于识别差异对已修改函数的最佳猜测?

2 个答案:

答案 0 :(得分:5)

git diff *

中列出函数的魔术呗
git diff |                  \
grep -E '^(@@)' |           \
grep "(" |                  \
sed 's/@@.*@@//' |          \
sed 's/(.*//' |             \
awk -F " " '{print $NF}' |  \
uniq

......它的作用是......

  
      
  1. 挑选当前差异,
  2.   
  3. 接下来只挑选带有“hunk-headers”的行,
  4.   
  5. 接下来只选择带有左括号的行(可能包含函数名称),
  6.   
  7. next忽略了hunk标题,
  8.   
  9. next忽略左括号后面的文字
  10.   
  11. 接下来只选择前括号前面的单词,
  12.   
  13. 最后忽略列表中同一个单词的多次出现。
  14.   

瞧!你有一份当前git diff正在修改的功能列表。

*在运行bash的Ubuntu 16.04上使用git version 2.7.4验证。

答案 1 :(得分:3)

这是对我认为你想要的东西的快速而肮脏的尝试。它会显示git log以显示所有修订,-p将diff包含在日志中,grep仅包含包含提交ID和hunk标头的行,并使用{sed 1}}过滤掉行号,只留下Git在hunk标题后写的函数名的猜测。

git log -p | grep -E '^(commit|@@)' | sed 's/@@.*@@//'