有没有办法使用git来识别在历史中的每个版本的所有修改过的函数的好办法? 我已经使用-p开关试过了,但它似乎并没有以同样的方式,SVN秀-C函数的参数工作的人。
我的假设是,我需要使用“git的差异HEAD〜我头〜I-1 -p”为我的增加值。 我丢失了一些参数,这将有助于确定对被修改的功能差异的最好的猜测?
有没有办法使用git来识别在历史中的每个版本的所有修改过的函数的好办法? 我已经使用-p开关试过了,但它似乎并没有以同样的方式,SVN秀-C函数的参数工作的人。
我的假设是,我需要使用“git的差异HEAD〜我头〜I-1 -p”为我的增加值。 我丢失了一些参数,这将有助于确定对被修改的功能差异的最好的猜测?
下面是什么我想你会为一个快速和肮脏的尝试。 它做了git log
来显示所有版本, -p
包括在日志中的差异,一个grep
仅包括含有提交ID和大块头的线,并且使用sed
过滤掉的行号,只留下了猜想在那混帐的大块头之后写的函数名。
git log -p | grep -E '^(commit|@@)' | sed 's/@@.*@@//'
这是一个魔法咏唱的内列出函数git diff
*
git diff | \
grep -E '^(@@)' | \
grep "(" | \
sed 's/@@.*@@//' | \
sed 's/(.*//' | \
awk -F " " '{print $NF}' | \
uniq
...以及它的作用是...
- 精选的电流差异,
- 未来选秀权只能用“猛男报头”行,
- 下纬纱只与开括号线(为可能包含功能名),
- 接下来忽略了大块头,
- 接下来忽略左括号后的文本,
- 未来选秀权只有立即开始括号前的字,
- ,最后忽略列表中的同一个词多次出现。
瞧! 你有一个函数列表当前正在修改git diff
。
*验证使用git version 2.7.4
在Ubuntu 16.04运行bash。
您可以通过使用Git TEXTCONV筛选器列表中的一个版本号的所有修改功能。 我们的想法是创建一个特定的过滤器,列出了所有函数/方法,并为所有的功能,身体的校验和。 这使这种过滤TEXTCONV观点:
m() 12
bar() 42
(这里m()
是一个函数签名, 12
是其主体的校验和))
当git diff
上使用两个版本这个过滤器之前和改版后:
例如:FOO中加入
m() 12
+ foo() 24
bar() 42
例如:foo的主体被修改
m() 12
- foo() 23
+ foo() 24
bar() 42
怎么做?
git config diff.java-ls-methods.textconv /home/path/to/java-ls-methods.groovy
echo "*.java diff=java-ls-methods" >> .gitattributes
git diff
或(对最后提交的差异) git diff master
(DIFF对另一个分支) .gitattributes
回到常规差异 积分:解决方案从灵感https://stackoverflow.com/a/16929266