Команда git diff
принимает необязательные значения для --stat
:
--stat[=<width>[,<name-width>[,<count>]]]
Generate a diffstat. You can override the default output width for
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
«фарфора» "интерфейсная часть и команда git diff-tree
сантехники - это git diff
поиск настроенных вами параметров для таких параметров, как diff.renames
решение, следует ли выполнять обнаружение переименования. Что ж, плюс внешний интерфейс git diff
будет делать то же самое, что git diff-index
если вы сравниваете фиксацию с индексом , например. Другими словами, git diff
читает вашу конфигурацию и автоматически вызывает нужную сантехнику .)
--stat-graph-width=...
переключатель. Следует также отметить , что установка максимума--stat-graph-width=
и--stat-name-width=
не достаточно, вы также должны установить--stat-width=
достаточно большой , чтобы покрыть два.diff.statGraphWidth
вы можете использовать для установки--stat-graph-width
значения, но остальные по умолчанию соответствуют ширине вашего терминала. (Итак, альтернативный ответ: «да, просто сделайте окно терминала шириной в 1000 столбцов» :-))Для обработки сценария может быть лучше использовать одно из следующих:
Каждый из них становится более удобным для надежной обработки сценария в сочетании с
-z
опцией, которая используетсяNUL
в качестве терминаторов полей.источник
git rev-parse --show-toplevel
. Первоначальная проблема относилась к усеченным путям, что является проблемой в diffstats, особенно для длинных имен файлов или низкого значения для--stat-name-width
. Приведенные выше команды не будут усекать пути, но покажут «полный» путь по запросу, хотя по-прежнему относительно корня репозитория.Для пользователей Bash вы можете использовать
$COLUMNS
переменную для автоматического заполнения доступной ширины терминала:Очень длинные имена путей все еще могут быть усечены; в этом случае вы можете уменьшить ширину части +++ / ---, используя
--stat-graph-width
, например, это ограничивает ее до 1/5 ширины терминала:Для более общего решения вы можете использовать выходные данные
tput cols
для определения ширины терминала.источник
--stat=$COLUMNS,$COLUMNS
? Печатать его каждый раз - безумие.export COLUMNS
к вашему~/.bashrc
, и в вашем~/.gitconfig
Under[alias]
добавитьsmart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
diff
. Я хочу, чтобы он работал и для слияний, и для вытягивания и т. Д. (Невозможно даже вручную сделать это там.) Я не думаю, что GIT поддерживает это.Там есть вариант
--name-only
:git diff --name-only
. Эта опция также поддерживается другими командами git, такими какshow
иstash
.Пути не сокращаются с опцией.
источник
Я создал следующий псевдоним git:
Он считывает количество столбцов из
tput cols
команды. По умолчанию используется сравнениеmaster
, но при желании вы можете указать другую ветку.источник
Я нашел простое решение: (работает только на * nix, извините, нет osx)
Эта версия работает для обоих, но не очень хорошо смотрится на osx.
источник
Я обнаружил, что поведение diff --stat изменилось где-то около git 1.7.10, где раньше он сокращал пути к файлам до фиксированной ширины по умолчанию - теперь он отображает столько, сколько позволяет окно вашего терминала. Если вы столкнулись с этой проблемой, убедитесь, что вы обновились до 1.8.0 или новее.
источник