НейроАгент

Фильтрация Git Log по автору: Полное руководство

Узнайте, как фильтровать git log по имени или email автора. Полное руководство с шаблонами regex, фильтрацией по нескольким авторам и практическими примерами для анализа вклада в код.

Вопрос

Как просмотреть git log, содержащий только коммиты одного пользователя?

При использовании git log, как можно отфильтровать по пользователю, чтобы видеть только его коммиты?

НейроАгент

Чтобы просмотреть журнал коммитов только одного пользователя, используйте опцию --author с командой git log. Вы можете фильтровать по имени автора или адресу электронной почты с помощью git log --author="John Doe" или git log --author="john.doe@example.com" соответственно. Эта мощная возможность фильтрации позволяет сосредоточиться на конкретных вкладах и проанализировать индивидуальные рабочие паттерны в вашем репозитории.

Содержание

Базовая фильтрация по автору

Самый простой способ фильтровать журнал git по автору — использовать опцию --author. Эта опция принимает строку, которая может быть обычным текстом или шаблоном регулярного выражения, соответствующим имени автора.

bash
git log --author="John Doe"

Эта команда покажет все коммиты, имя автора которых содержит “John Doe”. По умолчанию фильтрация не чувствительна к регистру, поэтому она будет соответствовать различиям в написании заглавных букв. Согласно официальной документации git, эта опция ограничивает вывод коммитами, строки заголовка автора которых соответствуют указанному шаблону.

Для поиска коммитов “Adam Dymitruk” проще ввести git log --author="Adam" или использовать фамилию, если есть несколько участников с одним и тем же именем источник.

Фильтрация по адресу электронной почты

Фильтрация по адресу электронной почты часто более надежна, чем фильтрация по имени, потому что:

  1. Она не путается, когда авторы используют различные имена на разных компьютерах
  2. Она предотвращает проблему, при которой фильтрация по “authorname” также покажет результаты для “authorname2” и т.д.
bash
git log --author="john.doe@example.com"

Как отмечается в обсуждении на Stack Overflow, фильтрация по адресу электронной почты имеет эти преимущества источник.

Фильтрация по адресу электронной почты особенно полезна в командах, где участники могут использовать разные имена, но иметь единые адреса электронной почты во всех коммитах.

Использование регулярных выражений

Опция --author в Git поддерживает регулярные выражения для более сложных шаблонов фильтрации. Вы можете использовать регулярные выражения для соответствия частичным именам, нескольким шаблонам или конкретным форматам.

bash
# Найти авторов с "John" в имени
git log --author="John"

# Найти авторов с "Doe" в имени
git log --author="Doe"

# Использовать расширенные регулярные выражения для более сложных шаблонов
git log --author="John|Jane" --grep-extended-regexp

Согласно документации git, опция --author использует регулярные выражения для сопоставления, и при наличии более одного --author=<pattern>, выбираются коммиты, автор которых соответствует любому из шаблонов.

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

bash
git log --author="Andrew|Stephen" --since="2016-09-20"

В некоторых системах может потребоваться установить git config --global grep.extendedRegexp true для правильной работы расширенных регулярных выражений источник.

Фильтрация по нескольким авторам

Вы можете легко сопоставлять нескольких авторов, так как регулярные выражения являются базовым механизмом для этого фильтра. Чтобы перечислить коммиты Джонатана или Адама, вы можете сделать следующее:

bash
git log --author="Jonathan|Adam"

Журнал Git может принимать несколько опций, поэтому вы можете комбинировать их в соответствии с вашими потребностями. При наличии более одного --author=<pattern>, выбираются коммиты, автор которых соответствует любому из <pattern> источник.

Для более сложной фильтрации по нескольким авторам вы можете использовать:

bash
git log --author="John Doe" --author="Jane Smith"

Это покажет коммиты от любого из этих авторов.

Исключение конкретных авторов

Иногда вам нужно исключить коммиты определенных авторов. Этого можно достичь с помощью регулярных выражений в сочетании с переключателем --perl-regexp и отрицательными просмотрами вперед (negative lookaheads).

bash
# Исключить коммиты Стивена или Джона
git log --author='^(?!Stephen|John).*$' --perl-regexp

Как объясняется в блоге /code-comments/, вы можете исключить коммиты этих авторов с помощью регулярного выражения в сочетании с --perl-regexp (для получения отрицательных просмотров вперед) источник.

Другой подход, показанный на Stack Overflow:

bash
git log --perl-regexp --author='(?<!(john|paul|ringo))@'

Это использует отрицательный просмотр назад (negative lookbehind) для исключения определенных авторов.

Дополнительные опции фильтрации

Вы можете комбинировать фильтрацию по автору с другими опциями git log для получения более точных результатов:

bash
# Фильтрация по автору и диапазону дат
git log --author="John Doe" --since="2023-01-01" --until="2023-12-31"

# Фильтрация по автору и отображение только хэшей коммитов
git log --author="John Doe" --pretty=format:"%H"

# Фильтрация по автору и отображение статистики
git log --author="John Doe" --stat

# Фильтрация по автору и ограничение количества коммитов
git log --author="John Doe" --oneline -10

Команда git log высоко настраиваема и может быть комбинирована с различными опциями форматирования для отображения информации наиболее полезным для вас способом.

Практические примеры

Вот несколько практических примеров использования фильтрации по автору в реальных сценариях:

Пример 1: Просмотр по имени

bash
git log --author="John Doe"

Пример 2: Просмотр по email

bash
git log --author="john.doe@example.com"

Пример 3: Фильтрация по диапазону дат

bash
git log --author="John Doe" --since="2023-01-01" --until="2023-12-31"

Пример 4: Несколько авторов

bash
git log --author="John|Jane"

Пример 5: Исключение авторов

bash
git log --author='^(?!Stephen|John).*$' --perl-regexp

Пример 6: Комбинирование с другими опциями

bash
git log --author="John Doe" --oneline --graph --decorate

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

Источники

  1. How to filter Git commit logs by author | LabEx
  2. How to use the --author option with git log command | LabEx
  3. How can I view a git log of just one user’s commits? - Stack Overflow
  4. Git - git-log Documentation
  5. Git - Filtering the Commit History - GeeksforGeeks
  6. How Can I View a Git Log of Just One User’s Commits? | Better Stack Community
  7. How to filter commits by author in Git log - Sling Academy
  8. Filtering by Author Name - Adam Dymitruk
  9. GIT: filter log by group of authors - Stack Overflow
  10. filter git commits by author | /code-comments/
  11. Other - “git log” does not work for multiple author filtering | The FreeBSD Forums
  12. Git - git-shortlog Documentation
  13. Useful tricks you might not know about git log

Заключение

Фильтрация журнала git по автору — это мощная техника, которая помогает сосредоточиться на конкретных вкладах в вашем репозитории. Ключевые выводы:

  • Используйте git log --author="name" для фильтрации по имени автора
  • Предпочитайте фильтрацию по email (git log --author="email@example.com") для более надежных результатов
  • Используйте регулярные выражения для сложных шаблонов фильтрации
  • Комбинируйте фильтрацию по автору с другими опциями git log для всестороннего анализа
  • Используйте --perl-regexp для расширенных шаблонов регулярных выражений, включая исключения

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