Как избежать того, чтобы git diff поместил имя блока кода в заголовок блока? - PullRequest
3 голосов
/ 23 декабря 2011

Вот некоторые части из файла diff, сгенерированного с использованием git diff HEAD.

@@ -261,6 +261,13 @@ public class JSONServiceAction extends JSONAction {
                            return new double[0][0];
                    }
            }
+               /*
+                * Some changes made...
+                */
            else if (typeNameOrClassDescriptor.equals("[[F")) {
                    String[] values = request.getParameterValues(parameter);

@@ -587,4 +594,4 @@ public class JSONServiceAction extends JSONAction {
    private Map<String, Object[]> _methodCache =
            new HashMap<String, Object[]>();

-}
\ No newline at end of file
+}

У меня есть две проблемы с этим:

  1. посмотрите на строки заголовка блока, есть public class ... после @@. Так git diff помещает имя блока кода (здесь определение класса) в заголовок блока. Почему git diff делает это? Могу ли я попросить git diff не помещать эту часть в заголовок блока?
  2. Посмотрите на второй кусок. Он показывает последние несколько строк файла класса, который не изменяется вообще. Почему git diff включает эту часть в файл diff? Могу ли я избежать этого? (На самом деле единственная измененная часть этого класса находится в области первого блока, где я добавил три строки комментариев перед else if)

Я проверил справочную страницу git diff, но теперь я все еще в замешательстве, потому что не совсем понимаю некоторую часть руководства; Я также проверил некоторые связанные вопросы, которые рекомендовал SO, но они все о том, «КАК ПОКАЗАТЬ НАЗВАНИЕ МЕТОДА ЗДЕСЬ ВМЕСТО ИМЯ КЛАССА», например: Есть ли способ попросить git diff показать имя метода вместо имени класса? .

Если нет способа отключить пользовательскую головку, пожалуйста, сообщите мне, чтобы я мог попробовать некоторые сценарии.

Обновление: причина, по которой я хочу отключить описание блока

В моей работе, бенчмарк-тесте, одним из шагов в скрипте сборки является автоматический сбор информации о кодовой базе исходной папки, если это рабочая копия svn - информация включает в себя файл diff. Теперь мы хотим, чтобы он поддерживал git. Конечно, мы сохраним diff-файл в формате чистого git, однако мы должны сгенерировать svn-совместимый diff одновременно. Это связано с тем, что разработчики используют git, а QA (тестеры) - svn (менеджер переносит проверенный код только из git в svn).

Для клиента SVN (SmartSVN, который совсем не умен) в моей рабочей среде не имеет значения, имеет ли файл diff определенные строки информации SVN. Важно, что путь к файлу не имеет префикса, а заголовок блока не имеет описания ...

Ответы [ 3 ]

3 голосов
/ 23 декабря 2011
  1. Git выставляет имена этих блоков, чтобы людям было легче определять, на какую часть файла влияет данный патч.В случае C он показывает первую строку определения функции, что действительно полезно.Очевидно, это немного менее информативно в случае с Java.Почему это вас беспокоит?
  2. Вы добавили или удалили символ новой строки в конце файла.Git рассматривает это как разницу.Следовательно это перечислено в diff.
2 голосов
/ 23 декабря 2011
  1. Как уже упоминалось, заголовок блока предназначен для удобства. Если вы хотите изменить то, что он отображает, обратитесь к разделу руководства git attribute по определению пользовательского заголовка hunk и посмотрите пример для python здесь . Если вы зададите регулярное выражение, чтобы оно не совпадало, вы не получите заголовок блока. Прежде чем сделать это, я бы посоветовал убедиться, что у вас есть веские причины для этого. Это ничего не должно навредить, и если вы сами разбираете diff, вы должны быть в состоянии принять стандартный git diff.

  2. Индикатор \ No newline at end of file является стандартным обозначением в унифицированном файле diff и используется для точного указания этого.

2 голосов
/ 23 декабря 2011

Для вашего пункта 2 у вас был файл без новой строки в конце. Ваша текущая версия имеет новую строку в конце (многие редакторы добавляют ее для вас). Это то, что показывает дифференциал.

$ git init
Initialized empty Git repository in ...
$ echo -n hello > file
$ git add file ; git commit -m test
[master (root-commit) 846c33e] test
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file
$ echo hello > file
$ git diff
showing.diff --git a/file b/file
index b6fc4c6..ce01362 100644
--- a/file
+++ b/file
@@ -1 +1 @@
-hello
\ No newline at end of file
+hello

Для вашего 1. см .: Git format-patch для совместимости с SVN?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...