我设置*.py diff=python
中.git/info/attributes
。 所以混帐知道在哪里的功能界限。 git的差异-W甚至可以确保整体功能显示。
但是,有没有办法到git的差异的输出限制为仅特定功能(或不止一个)?
(如果做不到这一点,我想这是awk的...)
编辑这也将是有益的git log
和git rev-list
:不要告诉我每一个承诺会修改views.py,告诉我犯这是修改某个功能。 (是的,在一个理想的世界,views.py不会是2000线的庞然大物经常被8名不同的开发人员修改...)
好,感谢Birei ,我们有一个解决方案。
在这个问题的答案,带着几分的bash的结合使用awk脚本:
~/scripts/grit:
#!/bin/bash
cmd=$1
shift 1
if [ "$cmd" = "" ]; then
git
# other commands not relevant to this question go here
elif [ $cmd = "funcdiff" ]; then
git show "$1:$3" | awk -f ~/scripts/getfunc.awk -v f=$4 > /tmp/.tmp1
git show "$2:$3" | awk -f ~/scripts/getfunc.awk -v f=$4 > /tmp/.tmp2
git diff -W --no-index /tmp/.tmp1 /tmp/.tmp2
else
git $cmd $@
fi
实例: grit funcdiff 009e75 8b7a14 ./staging.py write_uploaded
这也可以在〜/添加的.gitconfig作为一个git的别名
我没有发现任何其他选项(比其他--function-context
或其-W
能够限制一个diff输出的单一功能的短选项,已经提到)。
甚至认为-W
选项是不够的,知道“功能”可以相差很大,从语言到语言,在此说明的博客文章 :
我发现这个选项相当不可靠的,至少在一个大的PHP类。
我的测试发现--function-context
通常会导致显示几乎所有的原始文件,和git出现无知PHP的功能界限。
前和变更后的背景线的数量似乎是随机的,且DIFF不一定总是显示功能的所有行,无论是。
在原来的补丁消息介绍了这种变化带来了曙光:
此实现具有相同的缺点作为一个在grep的,即没有办法明确查找函数的结束。
这意味着额外的上下文的几行显示,直至下一个公认的功能开始。
所以才出现检测功能的界限是困难的饭桶。
看来,在这种情况下,混帐从未检测功能边界,给我们整个文件的情况下。
作为OP史蒂夫贝内特指出的,一个可能的解决方案将是,以限定一个git别名这将修改前后提取在修正的功能,以diff的那些2“温度”文件。
在“实例创建的Git别名 ”和“ bash脚本选择从一个文件一个Python功能 ”。
这是一个临时的解决方案,将能够解析特定类型源的OP发生在他的回购一起工作。