有没有办法让git diff显示方法名而不是类名?

Tar*_*del 24 php git diff

这已经困扰了我一段时间,搜索没有提示.

问题:

当我git diff在包含a的PHP文件上执行操作时Class,每个hunk描述都有类名,没有提到方法名.

例如:

@@ -351,7 +351,7 @@ class Session
             $form->setError($field, $subpassValid['msg']);
       }

       // E-Mail address error checking
       $field = "email";  //Use field name for email
-       if(!isset($subemail) || strlen($subemail = trim($subemail)) == 0){
+       if(!$subemail || strlen($subemail = trim($subemail)) == 0){
          $form->setError($field, "* Email not entered");
@@ -373,7 +373,7 @@ class Session
...
Run Code Online (Sandbox Code Playgroud)

题:

有没有办法告诉git显示方法名称而不是/沿着类名称?

编辑:

附加信息:

diff version: 2.8.1
git version: 1.7.6 (from the git-core PPA)
OS: Ubuntu 9.10
Run Code Online (Sandbox Code Playgroud)

我最初从股票Ubuntu repos获得了git版本1.7.0.4,但更新了它,希望它是一个bug.不幸的是,这并没有解决问题.

EDIT2:

经过更多测试后,似乎如果函数声明完全缩进(使用空格或制表符),git diff则不会获取函数名称.这似乎是一个错误git.

Tar*_*del 22

如果你发现自己有这个问题,这可能是由于这样的事实,gitdiff定义大块头.如果您想强制git使用其预定义的PHP,请将以下行放在.gitattributesgit存储库的根文件夹或存储库中的.git/info/attributes文件中:

*.php diff=php
Run Code Online (Sandbox Code Playgroud)

(类似地支持其他语言.文档中提供了内置模式的列表.)

在全球范围内设置此项

应该可以通过执行以下操作来全局设置它 git version >= 1.4

  1. 把线放进去 ~/.gitattributes
  2. git config --global core.attributesfile "~/.gitattributes"

或者,如果您想全局设置它

  1. 把线放进去 /etc/gitattributes

警告:如果您个人在全球范围内设置此选项,则您的同事在运行时可能会得到不同的结果,git diff因为他们不会检查.gitattributes存储库的副本.


san*_*mai 8

我不太明白为什么它不能按预期的方式工作.

作为临时解决方案,请将以下内容添加到.gitattributes:

*.php   diff=phpf
Run Code Online (Sandbox Code Playgroud)

这些线路.git/config~/.gitconfig:

[diff "phpf"]
        xfuncname = "^[\t ]*(((public|protected|private|static)[\t ]+)*function.*)$"
Run Code Online (Sandbox Code Playgroud)

要获得永久性解决方案,请直接通过git@vger.kernel.org邮件列表向Git开发人员咨询.

  • 我认为最后的`\n`打破了它; 它以某种方式用于分离正则表达式,你在这里只有一个.没有它,它对我有用.(另一种解决方案虽然更优雅.) (3认同)