Есть ли способ попросить git diff показать имя метода вместо имени класса? - PullRequest
21 голосов
/ 08 сентября 2011

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

Проблема:

Когда я делаю 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 ]

17 голосов
/ 08 сентября 2011

Если у вас возникла эта проблема, это может быть связано с тем, что 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 с хранилищем.

7 голосов
/ 08 сентября 2011

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

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

*.php   diff=phpf

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

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

Для постоянного решения обратитесь к разработчикам Git напрямую по списку рассылки *1015*.

0 голосов
/ 30 июля 2018

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

См. коммит 1ab6316 , коммит 9992fbd (03 июля 2018) Кана Нацуно (kana) .
(Объединено Junio ​​C Hamano - gitster - в коммит d3f0938 , 24 июля 2018 г.)

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

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

...