将Git Diff限制为一个或多个函数?

Ste*_*ett 11 git git-diff git-log

我开始*.py diff=python.git/info/attributes.所以Git知道功能界限在哪里.git diff -W甚至可以确保显示整个功能.

但有没有办法将git diff的输出限制为特定的函数(或多个函数)?

(没错,我猜它很糟糕......)

编辑这也将是有益的git loggit rev-list:不显示我的每一个承诺会修改views.py,告诉我犯这是修改某个功能.(是的,在一个理想的世界里,views.py不会是一个经常被8个不同的开发者修改的2000行庞然大物...)

Ste*_*ett 3

好的,感谢Birei,我们有了解决方案。

在该答案中使用 awk 脚本,并结合一些 bash:

~/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
Run Code Online (Sandbox Code Playgroud)

用法示例:grit funcdiff 009e75 8b7a14 ./staging.py write_uploaded

这也可以作为 git 别名添加到 ~/.gitconfig 中