Git и последствия рефакторинга

ifani

Подскажите, плиззз, как быть в следующей ситуации:
Я отрефакторил проект, разбив классы на интерфейс и реализацию, при этом переименовав изначальные классы в ClassNameImpl и создав интерфейсы ClassName.
То есть если раньше было только
 
 class MyService 

то стало
 

interface MyService
class MyServiceImpl implements MyService

Сейчас при попытке смерджить изменения с основной веткой обнаружил, что для некоторых классов git понимает, что реализация была переименована и был создан одноименный интерфейс, то есть

MyServiceImpl -> renamed from MyService
MyService -> new file

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

MyServiceImpl -> new file
MyService -> modified file

Можно ли это как-то поправить?

istran

Поиграйся с опцией --rename-threshold для git merge.

ifani

Спасибо - похоже, это поможет

ifani

Кстати, пока гуглил на тему тему, наткнулся на обсуждение на stackoverflow :
git commit never detects renames. It just writes content to the repository. Renames (and copies as well) are only detected after the fact, i.e. when running git diff, git merge and friends. That's because git does not store any rename/copy information.

Это действительно так? Имхо, очень странно. Mercurial, насколько я знаю, эту информацию хранит.

vall

да, в гите каджый коммит сылается на снапшот дерева. никаких дельт нигде не хранится.
Оставить комментарий
Имя или ник:
Комментарий: