Подтвердить что ты не робот

Есть ли способ попросить 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 показать имена методов вместо/вдоль стороны имени класса?

Edit:

Дополнительная информация:

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.

4b9b3361

Ответ 1

Если у вас возникла эта проблема, возможно, это связано с тем, что git позволяет diff определять заголовок hunk. Если вы хотите заставить git использовать его предопределенные для PHP, поместите следующую строку в .gitattributes в корневую папку вашего репозитория git или .git/info/attributes в вашем репозитории:

*.php diff=php

(Другие языки поддерживаются аналогично. Список встроенных шаблонов доступен в документации.)

Установка этого глобально

Необходимо глобально установить это, выполнив следующее в git version >= 1.4

  • Поместите строки в ~/.gitattributes
  • Запустить git config --global core.attributesfile "~/.gitattributes"

Или если вы хотите установить глобально

  • Поместите строки (строки) в /etc/gitattributes

Предупреждение: Если вы установили это глобально, ваши сверстники могут получить разные результаты при запуске git diff, так как они не будут проверять копию .gitattributes в репозитории.

Ответ 2

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

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

*.php   diff=phpf

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

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

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