Другое

Git Log: Показ файлов как в SVN Log -v

Узнайте, как отображать измененные файлы в командах Git log, аналогично подробному режиму SVN. Изучите опцию --name-status и другие опции Git log для анализа изменений файлов в коммитах. Освойте отслеживание файлов в Git уже сегодня!

Как сделать так, чтобы ‘git log’ отображал имена файлов, как ‘svn log -v’?

Команда SVN log имеет режим подробного вывода (-v), который показывает имена файлов, измененных в каждом коммите. Например:

jes5199$ svn log -v
------------------------------------------------------------------------
r1 |   jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line
Changed paths:
   A /AUTHORS
   A /COPYING
   A /ChangeLog
   A /EVOLUTION
   A /INSTALL
   A /MacOSX

Какая эквивалентная команда Git или опция для отображения списка измененных файлов в каждом коммите, аналогично подробному выводу SVN log?

Эквивалент команды SVN svn log -v в Git - использование опции --name-status с командой git log, которая отображает имена и статус измененных файлов в каждом коммите. Наиболее распространенная и эффективная команда - git log --name-status --oneline, которая предоставляет краткий вид, аналогичный подробному выводу SVN, показывая каждый коммит с кодами статуса (A, M, D и т.д.) и путями к файлам.

Содержание


Базовые команды Git для отображения измененных файлов

Git предоставляет несколько опций для отображения измененных файлов в коммитах, аналогично подробному выводу SVN. Наиболее релевантные опции включают:

git log --name-status

Это наиболее близкий эквивалент svn log -v, показывающий как статус, так и пути к файлам для каждого измененного файла:

bash
git log --name-status

Пример вывода:

commit abc1234 (HEAD -> main)
Author: John Doe <john@example.com>
Date:   2024-01-15 10:30:00 +0000

    feat: Add new user authentication feature

A   src/auth/user.js
M   package.json
D   src/legacy/auth.js

commit def5678
Author: Jane Smith <jane@example.com>
Date:   2024-01-14 15:45:00 +0000

    fix: Resolve login validation issue

M   src/auth/validation.js
A   tests/auth.test.js

git log --name-only

Если вам нужны только имена файлов без кодов статуса:

bash
git log --name-only

Это покажет только пути к файлам для каждого коммита, аналогично подробному выводу SVN, но без индикаторов статуса.

git show --name-only

Только для последнего коммита:

bash
git show --name-only

Это быстро показывает, какие файлы были изменены в самом последнем коммите, что эквивалентно svn log -v -l 1.


Подробное сравнение с SVN Log -v

Формат вывода SVN svn log -v включает:

jes5199$ svn log -v
------------------------------------------------------------------------
r1 |   jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line
Changed paths:
   A /AUTHORS
   A /COPYING
   A /ChangeLog
   A /EVOLUTION
   A /INSTALL
   A /MacOSX

Вывод Git git log --name-status предоставляет похожий, но более краткий формат:

commit abc1234 (HEAD -> main)
Author: John Doe <john@example.com>
Date:   2024-01-15 10:30:00 +0000

    Add initial project structure

A   AUTHORS
A   COPYING
A   ChangeLog
A   EVOLUTION
A   INSTALL
A   MacOSX

Основные различия:

  • Git использует хеши коммитов вместо номеров ревизий
  • Git более prominently показывает метаданные коммита (автор, дата, сообщение)
  • Оба используют одинаковые коды статуса (A, M, D и т.д.)

Примечание: Согласно официальной документации Git, опция --name-status “показывает только имена и статус измененных файлов”, что делает ее наиболее прямым эквивалентом опции SVN -v.


Расширенные опции Git Log для анализа файлов

Помимо --name-status, Git предлагает несколько других полезных опций для анализа измененных файлов:

git log --numstat

Показывает количество добавленных и удаленных строк вместе с именами файлов:

bash
git log --numstat

Вывод:

commit abc1234
Author: John Doe <john@example.com>
Date:   2024-01-15 10:30:00 +0000

    feat: Add new user authentication feature

15	2	src/auth/user.js
5	1	package.json
0	15	src/legacy/auth.js

git log --stat

Показывает сокращенную статистику об изменениях:

bash
git log --stat

git log --raw

Показывает необработанный вывод с режимами файлов и именами объектов:

bash
git log --raw

git log --shortstat

Показывает сокращенную статистику без информации по каждому файлу:

bash
git log --shortstat

git log --check

Проверяет наличие ошибок пробелов в измененных файлах:

bash
git log --check

Практические примеры и варианты использования

Поиск файлов, измененных между двумя ветками

bash
git log --name-status main..feature-branch

Показать измененные файлы в последних 5 коммитах

bash
git log --name-status -5

Показать измененные файлы с пользовательским форматированием

bash
git log --pretty=format:"%h %s" --name-status

Фильтрация по определенным типам файлов

bash
git log --name-status -- "*.js"

Показать только измененные файлы (не добавленные или удаленные)

bash
git log --name-status | grep "^M"

Комбинирование опций для пользовательского вывода

Наиболее полезная комбинация - Краткий вывод, похожий на SVN

bash
git log --name-status --oneline

Эта комбинация объединяет информацию о файлах с однострочным сообщением коммита, делая ее очень похожей на подробный вывод SVN, но более читаемой.

Вид с графом и измененными файлами

bash
git log --name-status --graph --oneline --decorate

Показать коммиты с количеством файлов

bash
git log --name-status --pretty=format:"%h %s (%an, %ad)" | grep -E "^[^ ]"

Машинно-читаемый вывод для скриптов

bash
git log --numstat

Опция --numstat особенно полезна для скриптов, так как предоставляет машинно-читаемый вывод с количеством строк и именами файлов.


Заключение

Для репликации функциональности SVN svn log -v в Git у вас есть несколько отличных опций:

  1. Наиболее прямой эквивалент: Используйте git log --name-status, который показывает как пути к файлам, так и коды статуса (A, M, D и т.д.)
  2. Наиболее краткий: Используйте git log --name-status --oneline для чистого, читаемого вывода, похожего на формат SVN
  3. Для скриптов: Используйте git log --numstat для машинно-читаемого вывода со статистикой строк

Экосистема Git предоставляет больше гибкости, чем SVN, с дополнительными опциями вроде --stat, --raw и --shortstat для различных аналитических нужд. Для повседневного использования git log --name-status --oneline даст вам наиболее близкий опыт к подробному логированию SVN, используя преимущества более современного интерфейса Git.

Для более сложных рабочих процессов вы можете комбинировать эти опции с другими командами Git, такими как grep, sort и awk, чтобы создавать пользовательские рабочие процессы анализа файлов, соответствующие вашим конкретным потребностям.

Источники

  1. How to have ‘git log’ show filenames like ‘svn log -v’ - Stack Overflow
  2. Git - git-log Documentation
  3. How to show changed file name only with ‘git log’ - Stack Overflow
  4. git-log(1) - Linux man page
  5. Git log name status - libgit2sharp wiki
  6. svn log - Red Bean Book
Авторы
Проверено модерацией
Модерация