В чем разница между «git log --diff-filter=R» и «git log --find-renames»?

Я узнал из видеоурока о команде git

git log --diff-filter=R --find-renames,

и, прочитав документы, я пришел к выводу, что

git log --diff-filter=R

должны дать те же результаты, что и

git log --find-renames

а первую комбинированную команду можно считать опечаткой.

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

Может кто-нибудь сказать мне, в чем разница между этими командами, кроме того факта, что вы можете добавлять разные модификаторы к каждой из них?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
426
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разница на самом деле довольно проста:

  • Параметр --find-renames включает механизм поиска переименований, используя порог совпадения файлов по умолчанию, равный 50%. Механизм поиска переименования по умолчанию отключен в довольно старых версиях Git и включен по умолчанию в более новых версиях Git, поэтому, если у вас более новая версия Git (и вы не изменили настройки по умолчанию), добавление --find-renames к вашему git diff никакого эффекта.1

  • Параметр --diff-filter= устанавливает фильтры, сообщающие Git, какие файлы выборочно отображать после запуска внутреннего механизма сравнения. Выбор R указывает Git отображать Только те файлы, для которых было обнаружено переименование.

Следовательно, если у вас древняя версия Git, вам нужны параметры обе (или см. сноску 1), чтобы видеть только переименованные файлы, но с современным Git достаточно только параметра --diff-filter=R, если в конфигурации этого репозитория не отключено обнаружение переименования.


1Есть также несколько ручек конфигурации, которые вы можете установить с помощью git config или -c опций. Наиболее подходящим здесь является diff.renames, который может быть установлен на false, true или либо на copy, либо на copies. Дополнительные сведения см. в статье git config документация. Значение по умолчанию diff.rename изменилось с false на true в Git 2.9.0.

Другие вопросы по теме