Почему git diff-tree show всегда показывает переименование как добавление и удаление

В двух тестовых коммитах, где первый имел только операцию git mv file moved_file, а второй только mv moved_file moved_again_file && git add -A moved_file moved_again_fileоба отображаются как переименования в git status до совершения, но в git commit --verbose они показывают как новые и удаленные файлы.

Я ожидаю git diff-tree HEAD после каждого коммита показывать один R (переименовать) статус, но я продолжаю получать два: A и D,

Я пытаюсь написать сценарий, который будет выполнять действия, основанные на статусах файлов, но я не могу правильно спланировать R (или же C) статусы, если они всегда отображаются как добавить / удалить.

Git - это версия 1.8.3.1, если это имеет значение.

1 ответ

Решение

git diff-tree команда - это команда сантехника, а не команда фарфора, поэтому она имеет предсказуемое поведение.

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

Чтобы включить обнаружение переименования, добавьте -M или же --find-renames (и их необязательные пороги). использование -C или же --find-copies (с их необязательными порогами), чтобы найти копии; добавлять --find-copies-harder при желании

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