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

时间:2011-09-08 07:28:25

标签: php git diff

这一直困扰着我一段时间,但搜索却没有提示。

问题:

当我在包含git diff的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
...

问题:

有没有办法告诉git显示方法名称而不是/在类名旁边?

修改

其他信息:

diff version: 2.8.1
git version: 1.7.6 (from the git-core PPA)
OS: Ubuntu 9.10

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

<击>的 EDIT2:

<击>

经过更多测试后,如果函数声明完全缩进(使用空格或制表符),git diff似乎没有获取函数名称。这似乎是git中的错误。

3 个答案:

答案 0 :(得分:17)

如果您发现自己遇到此问题,可能是因为git允许diff定义hunk标头。如果要强制git使用其预定义的PHP,请将以下行放在git存储库的根文件夹中的.gitattributes或存储库中的.git/info/attributes文件中:

*.php diff=php

(同样支持其他语言。documentation中提供了内置模式列表。)

全局设置

应该可以通过在git version >= 1.4

中执行以下操作来全局设置此项
  1. 将行放入~/.gitattributes
  2. 运行git config --global core.attributesfile "~/.gitattributes"
  3. 或者如果你想全局设置

    1. 将行放入/etc/gitattributes
    2. 警告:如果您个人在全球范围内设置此选项,那么在运行git diff时,您的同行可能会得到不同的结果,因为他们不会检查.gitattributes与存储库的副本。

答案 1 :(得分:7)

我不太明白为什么它不起作用the way it should

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

*.php   diff=phpf

这些行到.git/config~/.gitconfig

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

对于永久性解决方案,请直接在git@vger.kernel.org mailing list向Git开发人员询问。

答案 2 :(得分:0)

由于Git 2.19(2018年第三季度)的差异可能会更好,因为.php的userdiff模式已更新。

请参见commit 1ab6316commit 9992fbdKana Natsuno (kana)(2018年7月3日)。
(由Junio C Hamano -- gitster --commit d3f0938中合并,2018年7月24日)

  

userdiff:在PHP Hunk标头中支持新关键字

     

最新版本的PHP支持 interface trait abstract class 和    final class
  该补丁修复了PHP块头regexp以支持所有这些关键字。