有没有办法要求git diff显示方法名称而不是类名?

2022-08-30 17:48:00

这已经困扰了我一段时间,搜索没有产生任何提示。

问题:

当我在包含的 PHP 文件上做一个时,每个 hunk 描述都有类名,但没有提到方法名。git diffClass

例如:

@@ -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存储库中获得git版本1.7.0.4,但更新了它,希望它是一个错误。不幸的是,这并没有解决问题。

编辑2:

经过更多的测试,如果函数声明完全缩进(使用空格或制表符),则似乎不会选择函数名称。这似乎是 中的一个错误。git diffgit


答案 1

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

*.php diff=php

(其他语言也同样受支持。文档中提供了内置模式的列表。

全局设置

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

  1. 将行放入~/.gitattributes
  2. git config --global core.attributesfile "~/.gitattributes"

或者,如果要全局设置此项

  1. 将行放入/etc/gitattributes

警告:如果您亲自全局设置此项,则您的对等方在运行时可能会得到不同的结果,因为他们不会签出与存储库的副本。git diff.gitattributes


答案 2

我不太明白为什么它没有以应有的方式工作。

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

*.php   diff=phpf

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

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

有关永久解决方案,请直接在 git@vger.kernel.org 邮件列表中询问Git开发人员。


推荐