【问题标题】:Is there a way to ask git diff to show the method name instead of the class name?有没有办法让 git diff 显示方法名而不是类名?
【发布时间】:2011-09-08 07:28:25
【问题描述】:

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

问题:

当我对包含 Class 的 PHP 文件执行 git diff 时,每个块描述都有类名,而没有提及方法名。

例如:

@@ -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,但更新它希望它是一个错误。不幸的是,这并没有解决问题。

Edit2:

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

【问题讨论】:

标签: php git diff


【解决方案1】:

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

*.php diff=php

(类似地支持其他语言。在documentation 中提供了内置模式的列表。)

全局设置

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

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

或者如果你想全局设置这个

  1. 将行放入/etc/gitattributes

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

【讨论】:

    【解决方案2】:

    我不太明白为什么它不起作用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 开发人员。

    【讨论】:

    • 执行上述操作会完全删除该部分。使用上面的例子,class Session 现在已经消失了,取而代之的是什么都没有。如果有帮助,我已经在原始问题中添加了版本号。
    • 我认为最后的\n 打破了它;它以某种方式用于分隔正则表达式,而您这里只有一个。没有它,它对我有用。 (不过,另一种解决方案更优雅。)
    【解决方案3】:

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

    commit 1ab6316commit 9992fbd(2018 年 7 月 3 日)Kana Natsuno (kana)
    (由 Junio C Hamano -- gitster -- 合并于 commit d3f0938,2018 年 7 月 24 日)

    userdiff:支持 PHP hunk header 中的新关键字

    最新版本的 PHP 支持 interfacetraitabstract classfinal class
    此补丁修复了 PHP hunk 标头正则表达式以支持所有这些关键字。


    Git 2.30(2021 年第一季度)确实有所改进:

    参见Javier Spagnoletti (phansys)commit aff9282(2020 年 10 月 7 日)。
    (由 Junio C Hamano -- gitster -- 合并到 commit a8a49eb,2020 年 10 月 27 日)

    userdiff: PHP:捕捉“抽象”和“最终”函数

    帮助者:Johannes Sixt
    签名者:Javier Spagnoletti

    PHP 允许像这样定义函数

    final public function foo() { }
    abstract protected function bar() { }  
    

    但我们的大块头模式无法识别这些装饰。

    将“final”和“abstract”添加到函数修饰符列表中。

    【讨论】:

      猜你喜欢
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 2010-11-22
      相关资源
      最近更新 更多