Почему 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
при желании