.git-blame-ignore-revs — это функция Git, представленная в версии 2.23, которая позволяет игнорировать определенные коммиты в результатах git Blame. Это особенно полезно для массовых коммитов, которые изменяют большое количество строк без изменения фактической функциональности кода, например, изменения форматирования, переименования или применения стандартов кодирования в базе кода. Игнорируя эти нефункциональные изменения, git виноват может сосредоточиться на значимых изменениях, которые объясняют контекст и причины кода.
Когда вы используете git Assessment для файла, он показывает, какой коммит изменил каждую строку файла последним, а также автора и временную метку. Это полезно для отслеживания того, почему была изменена конкретная строка. Однако, если большой коммит, который вносит чисто форматирующие изменения, например, применяет красивее, является частью истории, вина git может указывать на этот коммит во многих строках. Это затрудняет поиск фактической истории функциональных изменений.
Например, если ваша команда использует такой инструмент, как Prettier или ESLint, для переформатирования всей базы кода, полученный коммит может затронуть тысячи строк кода. Без .git-blame-ignore-revs git Assessment показывал бы этот коммит как ответственный за каждую затронутую строку, что могло бы скрыть более значимую историю каждой строки.
Используя .git-blame-ignore-revs, вы можете указать git вину пропустить эти коммиты и сосредоточиться на важных изменениях.
Чтобы понять, как использовать эту функцию, давайте рассмотрим пример из репозитория React.
Исходный код React включает массовые коммиты, при которых такие инструменты, как Prettier, запускались по всему проекту. Вот два таких коммита:
2. Зафиксировать: fd2b3e1
Сообщение: Компилятор: Unfork prettier config
Этот коммит содержит дальнейшие обновления конфигурации Prettier, затрагивающие все файлы .ts и .tsx в репозитории.
Эти коммиты касаются только форматирования и не предоставляют значимого контекста при выяснении того, почему строка кода была написана именно так.
Чтобы git Assessment игнорировал эти коммиты массового форматирования, мы можем создать файл .git-blame-ignore-revs в корне репозитория.
touch .git-blame-ignore-revs
2. Добавьте в файл соответствующие хэши коммитов, объяснив, почему каждый коммит игнорируется. В этом случае мы добавим два коммита, которые мы определили ранее:
# Prettier formatting changes c998bb1ed4b3285398c9c7797135d3f060243c6a fd2b3e13d330a4559f5aa21462e1cb2cbbcf144b
3. Сохраните файл .git-blame-ignore-revs в репозитории. Версионность этого файла может быть указана вместе с вашим кодом, что позволит всей команде использовать один и тот же список игнорируемых коммитов.
Чтобы не вводить параметр --ignore-revs-file каждый раз при использовании git Assessment, вы можете настроить Git на автоматическое использование файла .git-blame-ignore-revs.
git config blame.ignoreRevsFile .git-blame-ignore-revs
Это гарантирует, что каждый раз, когда кто-то запускает git Assessment в этом репозитории, Git автоматически игнорирует коммиты, перечисленные в .git-blame-ignore-revs.
Давайте посмотрим, как это работает на практике. Если не игнорировать коммиты массового форматирования, git виноват может показать:
$ git blame src/someFile.tsx c998bb1e (Joe Bloggs 2023-03-15 10:00:00 0200 1) import React from 'react'; fd2b3e13 (Alan 2023-04-01 14:15:30 0200 2) function App() { c998bb1e (Joe Bloggs 2023-03-15 10:00:00 0200 3) returnHello, world!; fd2b3e13 (Ben 2023-04-01 14:15:30 0200 4) }
Эти выходные данные показывают, что последнее изменение в строках 1 и 3 произошло из-за фиксации форматирования Prettier (c998bb1e), а строки 2 и 4 были изменены в другой массовой фиксации (fd2b3e13). Поскольку это изменения форматирования, это не поможет понять, кто ввел реальную логику этих строк.
После настройки .git-blame-ignore-revs запуск git Assessment пропустит массовые коммиты и покажет реальную историю:
$ git blame src/someFile.tsx a23d9b34 (May 2022-12-01 09:30:00 0200 1) import React from 'react'; b12e45a6 (JJ 2022-12-05 11:45:15 0200 2) function App() { a23d9b34 (Joe 2022-12-01 09:30:00 0200 3) returnHello, world!; b12e45a6 (Ram 2022-12-05 11:45:15 0200 4) }
Теперь git Assessment приписывает строки правильным коммитам, игнорируя несущественные изменения форматирования. Это дает нам полезную информацию, показывающую, кто внес фактические функциональные изменения.
Функция .git-blame-ignore-revs в Git 2.23 меняет правила игры для проектов с массовым форматированием или изменением стиля. Настроив файл .git-blame-ignore-revs и настроив свой репозиторий, вы сможете применять стандарты кодирования, запускать такие инструменты, как Prettier, или рефакторить код, не беспокоясь о загрязнении истории обвинений.
Благодаря такому подходу ваша команда сможет уверенно улучшать качество и форматирование кода, не жертвуя возможностью отслеживать значимые изменения, гарантируя, что git останется ценным инструментом для понимания истории и причин, лежащих в основе каждой строки кода.
В Think Throo мы стремимся обучать передовым архитектурным концепциям кодовой базы, используемым в проектах с открытым исходным кодом.
Увеличьте свои навыки программирования в 10 раз, практикуя передовые архитектурные концепции в Next.js/React, изучайте лучшие практики и создавайте проекты промышленного уровня.
У нас открытый исходный код — https://github.com/thinkthroo/thinkthroo (дайте нам звезду!)
Повышайте квалификацию своей команды с помощью наших продвинутых курсов, основанных на архитектуре кодовой базы. Свяжитесь с нами по адресу [email protected], чтобы узнать больше!
https://github.com/facebook/react/blob/main/.git-blame-ignore-revs
https://gist.github.com/kateinoigakukun/b0bc920e587851bfffa98b9e279175f2
https://github.com/facebook/react/commit/c998bb1ed4b3285398c9c7797135d3f060243c6a
https://moxio.com/blog/ignoring-bulk-change-commits-with-git-blame/
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3