Использование только имени с другими параметрами в Git - PullRequest
1 голос
/ 25 февраля 2020

Недавно я внес некоторые изменения в ветку, которая состояла из 90% изменений пробелов. Теперь я хотел бы посчитать, сколько было файлов, которые получили остальные 10% изменений. Есть ли способ для git diff при одновременной передаче других параметров, таких как --ignore-blank-lines? git diff --name-only --ignore-blank-lines возвращает весь список всех измененных файлов, а не отфильтрованный список. Если я опускаю --name-only, тогда diff показывает точные изменения, которые я хочу, но все, что я хочу, это список файлов, меня не волнуют сами изменения.

Спасибо!

1 Ответ

3 голосов
/ 26 февраля 2020

К сожалению, и --name-only, и --name-status используют ярлыки: они сравнивают сохраненные деревья (имя и га sh ID), не просматривая содержимое файла . 1

Вам нужно будет использовать git diff (или git show) с параметрами пробела, а затем удалить все, кроме имен файлов. Например:

$ git show | grep '^diff '
diff --git a/file1 b/file1
diff --git a/file2 b/file2
$ git show --ignore-blank-lines | grep '^diff '
diff --git a/file2 b/file2

Немного больше массажа (и / или использование --no-prefix) даст вам только имена файлов без префиксов a/ и b/:

$ git show --ignore-blank-lines --no-prefix | grep '^diff '
diff --git file2 file2

1 Если обнаружение переименования включено, детектор проверяет содержимое каждого файла. Однако он не использует параметры пробелов, поэтому это никак не влияет на результаты. Остальная часть алгоритма --name-status по-прежнему использует только сохраненный ха sh.

...