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 для отображения измененных файлов
- Подробное сравнение с SVN Log -v
- Расширенные опции Git Log для анализа файлов
- Практические примеры и варианты использования
- Комбинирование опций для пользовательского вывода
Базовые команды Git для отображения измененных файлов
Git предоставляет несколько опций для отображения измененных файлов в коммитах, аналогично подробному выводу SVN. Наиболее релевантные опции включают:
git log --name-status
Это наиболее близкий эквивалент svn log -v, показывающий как статус, так и пути к файлам для каждого измененного файла:
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
Если вам нужны только имена файлов без кодов статуса:
git log --name-only
Это покажет только пути к файлам для каждого коммита, аналогично подробному выводу SVN, но без индикаторов статуса.
git show --name-only
Только для последнего коммита:
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
Показывает количество добавленных и удаленных строк вместе с именами файлов:
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
Показывает сокращенную статистику об изменениях:
git log --stat
git log --raw
Показывает необработанный вывод с режимами файлов и именами объектов:
git log --raw
git log --shortstat
Показывает сокращенную статистику без информации по каждому файлу:
git log --shortstat
git log --check
Проверяет наличие ошибок пробелов в измененных файлах:
git log --check
Практические примеры и варианты использования
Поиск файлов, измененных между двумя ветками
git log --name-status main..feature-branch
Показать измененные файлы в последних 5 коммитах
git log --name-status -5
Показать измененные файлы с пользовательским форматированием
git log --pretty=format:"%h %s" --name-status
Фильтрация по определенным типам файлов
git log --name-status -- "*.js"
Показать только измененные файлы (не добавленные или удаленные)
git log --name-status | grep "^M"
Комбинирование опций для пользовательского вывода
Наиболее полезная комбинация - Краткий вывод, похожий на SVN
git log --name-status --oneline
Эта комбинация объединяет информацию о файлах с однострочным сообщением коммита, делая ее очень похожей на подробный вывод SVN, но более читаемой.
Вид с графом и измененными файлами
git log --name-status --graph --oneline --decorate
Показать коммиты с количеством файлов
git log --name-status --pretty=format:"%h %s (%an, %ad)" | grep -E "^[^ ]"
Машинно-читаемый вывод для скриптов
git log --numstat
Опция --numstat особенно полезна для скриптов, так как предоставляет машинно-читаемый вывод с количеством строк и именами файлов.
Заключение
Для репликации функциональности SVN svn log -v в Git у вас есть несколько отличных опций:
- Наиболее прямой эквивалент: Используйте
git log --name-status, который показывает как пути к файлам, так и коды статуса (A, M, D и т.д.) - Наиболее краткий: Используйте
git log --name-status --onelineдля чистого, читаемого вывода, похожего на формат SVN - Для скриптов: Используйте
git log --numstatдля машинно-читаемого вывода со статистикой строк
Экосистема Git предоставляет больше гибкости, чем SVN, с дополнительными опциями вроде --stat, --raw и --shortstat для различных аналитических нужд. Для повседневного использования git log --name-status --oneline даст вам наиболее близкий опыт к подробному логированию SVN, используя преимущества более современного интерфейса Git.
Для более сложных рабочих процессов вы можете комбинировать эти опции с другими командами Git, такими как grep, sort и awk, чтобы создавать пользовательские рабочие процессы анализа файлов, соответствующие вашим конкретным потребностям.