Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Команда 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 "фарфор" и командой t23 > plumbing заключается в том, что git diff просматривает ваши настроенные параметры для таких параметров, как diff.renames, чтобы решить, нужно ли выполнять переименование.Кстати, плюс передний конец git diff сделает эквивалент git diff-index, если вы сравниваете фиксацию с индексом, например. Другими словами, git diff читает вашу конфигурацию и автоматически вызывает правильную автоматическую сантехнику.)

Ответ 2

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

# 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

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

Ответ 3

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

git diff --stat=$COLUMNS

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

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

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

Ответ 4

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

Пути не сокращаются с помощью опции.

Ответ 5

Я создал следующий псевдоним git:

diffstat = ! "gitdiffstat() {  git diff --stat=$(tput cols) ${1:-master} ; }; gitdiffstat"

Считывает количество столбцов из команды tput cols. По умолчанию он отличается от master, но вы можете при желании указать другую ветвь.

$ git diffstat
 .gitalias | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Ответ 6

Я нашел простое решение: (работает только на * nix, извините, нет osx)

git diff --stat=$COLUMNS --relative | head -n -1 | cut -c 2- | xargs -d '\n' -P4 printf "$(pwd)/%s\n"

Эта версия работает для обоих, но на osx она не очень хорошо выглядит.

git diff --stat=$COLUMNS --relative | sed -e '$ d' | cut -c 2- | xargs -n4 -I{} echo "$(pwd)/{}"

Ответ 7

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