Заставить git diff --stat показать полный путь к файлу

Делатьgit diff --stat некоторые файлы перечислены с полным путем из базы репозитория, но некоторые файлы перечислены как:

<code>.../short/path/to/filename.  
</code>

То есть путь начинается с... и показан только короткий путь.

мне бы хотелосьgit diff перечислить полный путь к файлу для всех файлов, чтобы он был легко обработан скриптом. Есть ли способ, которым я могу получитьgit diff всегда показывать полный путь

Ответы на вопрос(5)

--name-only: git diff --name-only, Опция также поддерживается другими командами git, такими какshow а такжеstash.

Пути, 019; т сокращаются с опцией.

Решение Вопроса

git diff команда принимает необязательные значения для--stat:

--stat[=<width>[,<name-width>[,<count>]]]
       Generate a diffstat.       80-column terminal by --stat=<width>. The width of the filename
       part can be controlled by giving another width to it separated by a
       comma. By giving a third parameter <count>, you can limit the
       output to the first <count> lines, followed by ...  if there are
       more.

       These parameters can also be set individually with
       --stat-width=<width>, --stat-name-width=<name-width> and
       --stat-count=<count>.

(Для сценариев вы можете использоватьgit diff-tree непосредственно, так как это больше "сантехника" команда, хотя я подозреваю, что с вами все будет в порядке в любом случае. Обратите внимание, что вам нужен тот же дополнительный текст с--stat когда используешьgit diff-tree, Существенная разница между использованиемgit diff & Quot; фарфор & Quot; передний конец, аgit diff-tree сантехника команда, это чтоgit diff ищет ваши настроенные параметры для параметров, таких какdiff.renames решить, следует ли делать переименование обнаружения. Ну вот и плюс передокgit diff будет делать эквивалентgit diff-index например, если вы сравниваете коммит с индексом. Другими словами,git diff reads your config а такжеinvokes the right plumbing automatically.)

 22 апр. 2014 г., 16:22
Обратите внимание, что для ограничения ширины последней части (+++ / ---) вы можете использовать отдельный--stat-graph-width=... переключатель. Обратите внимание, что установка высокого--stat-graph-width= а также--stat-name-width= недостаточно, вы также должны установить--stat-width= достаточно большой, чтобы покрыть два.
 13 мар. 2015 г., 14:06
Есть ли способ глобализировать это? Вводить это каждый раз, это безумие.
 22 апр. 2014 г., 21:29
@ jakub.g: хорошая мысль. Основываясь на небольшом копании в исходном коде git, это пошло с git 1.7.10.
 13 мар. 2015 г., 17:07
@Rudie: увы, нет: есть переменная конфигурацииdiff.statGraphWidth Вы можете использовать для установки--stat-graph-width значение, но другие по умолчанию для вашей ширины терминала. (Итак, альтернативный ответ: «да, просто сделайте окно терминала шириной 1000 столбцов» :-))
 21 сент. 2012 г., 22:44
git diff --numstat - это то же самое, что и diff-tree

# list just the file names
git diff --name-only
path/to/modified/file
path/to/renamed/file


# list the names and change statuses:
git diff --name-status
M       path/to/modified/file
R100    path/to/existing/file   path/to/renamed/file


# list a diffstat-like output (+ed lines, -ed lines, file name):
git diff --numstat
1       0       path/to/modified/file
0       0       path/to/{existing => renamed}/file

Каждый из них становится более удобным для надежной обработки сценариев в сочетании с-z вариант, который используетNUL в качестве полевых терминаторов.

 21 авг. 2017 г., 16:22
Согласно моим тестам, вы не получаете полный путь к ресурсу с помощью этих команд. Пока я вижу только относительные пути для удаленных файлов. Я не знаю, относится ли это только к этим файлам.
 22 авг. 2017 г., 12:12
Все outpu будут возвращать пути относительноgit rev-parse --show-toplevel, Первоначальной проблемой была ссылка на усеченные пути, что является проблемой в diffstats, особенно для длинных имен файлов или низкого значения для--stat-name-width, Команды, приведенные выше, не будут усекать пути, но будут показывать «полный» путь по запросу, хотя все еще относительно корня хранилища.
 30 авг. 2017 г., 10:35
Действительно, вы правы. Спасибо за Ваш ответ!

что поведение diff --stat изменилось где-то около git 1.7.10, где раньше оно по умолчанию сокращало пути к файлам до фиксированной ширины - теперь оно отображает столько, сколько позволит ваше окно терминала. Если у вас возникла эта проблема, убедитесь, что вы обновились до версии 1.8.0 или новее.

$COLUMNS переменная для автоматического заполнения доступной ширины терминала:

git diff --stat=$COLUMNS

Очень длинные имена путей все еще могут быть усечены; в этом случае вы можете уменьшить ширину части +++ / ---, используя--stat-graph-widthНапример, это ограничивает его до 1/5 ширины терминала:

git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))

Для более общего решения вы можете использовать выводtput cols определить ширину терминала.

 28 апр. 2016 г., 00:29
@ user151841, который только меняетdiff, Я хочу, чтобы это работало и для слияний, и для подтягиваний (Не могу даже сделать это вручную.) Я не думаю, что GIT поддерживает это.
 28 апр. 2016 г., 01:15
@Rudie Что ж, после завершения вытягивания или объединения вы можете различать предыдущий и новый хэши.
 13 мар. 2015 г., 14:06
Есть ли способ глобализации--stat=$COLUMNS,$COLUMNS? Вводить это каждый раз, это безумие.
 27 апр. 2016 г., 18:36
@Rudie добавитьexport COLUMNS на ваш~/.bashrcи в вашем~/.gitconfig под[alias], добавлятьsmart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
 28 апр. 2016 г., 17:38
@ user151841 Конечно, но слияние уже дает сводку статистики. Без параметров / конфиг. Было бы здорово, если бы все "статистические сводки" использовал тот же конфиг.

Ваш ответ на вопрос