Создание git diff --stat показать полный путь к файлу


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

.../short/path/to/filename.  

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

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

4 68

4 ответа:

The 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читает свой конфиг и автоматически вызывает правильную сантехнику.)

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

git diff --stat=$COLUMNS

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

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

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

для обработки скриптов, возможно, лучше использовать один из следующих вариантов:

# 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 в качестве признаков конца поля.

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