Есть ли способ попросить git diff показать имя метода вместо имени класса?

Это беспокоило меня некоторое время, и поиск не дал никаких подсказок.

Выпуск:

Когда я делаю git diff на файл PHP, содержащий Classкаждое описание блока имеет имя класса без упоминания имени метода.

Например:

@@ -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

Изначально у меня была версия git 1.7.0.4 из репозитория Ubuntu, но я обновил ее, надеясь, что это ошибка. К сожалению, это не решило проблему.

Edit2:

После дополнительного тестирования выясняется, что если объявление функции вообще имеет отступ (с пробелами или табуляцией) git diffне подбирает имя функции. Это похоже на ошибку вgit,

3 ответа

Решение

Если у вас возникла эта проблема, это может быть связано с тем, что git Давайте diff определить заголовок куска. Если вы хотите, чтобы заставить git чтобы использовать его предопределенные для PHP, поместите следующую строку в .gitattributes в корневой папке вашего репозитория git или .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 с хранилищем.

Я не совсем понимаю, почему это не работает так, как должно.

В качестве временного решения добавьте следующее к .gitattributes:

*.php   diff=phpf

И эти строки .git/config или же ~/.gitconfig:

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

Для постоянного решения обратитесь к разработчикам Git напрямую по списку рассылки git@vger.kernel.org.

Этот diff, вероятно, будет лучше с Git 2.19 (Q3 2018), так как шаблон userdiff для .php был обновлен

Смотрите коммит 1ab6316, коммит 9992fbd (03 июля 2018 г.) от Kana Natsuno ( kana )
(Объединено Юнио С Хамано - gitster - в коммите d3f0938, 24 июля 2018 г.)

userdiff: поддержка новых ключевых слов в заголовке PHP

Последняя версия PHP поддерживает interface, trait, abstract class а также final class,
Этот патч исправляет регулярное выражение заголовка PHP для поддержки всех этих ключевых слов.

Другие вопросы по тегам