У меня точно такая же проблема, с которой вы сталкиваетесь. Несмотря на то, что я не могу дать вам ответ, я думаю, что вы можете прочитать это письмо Линус написал в 2005 году, оно очень уместно и может дать вам подсказку о том, как решить проблему:
& hellip; Я утверждаю, что любой SCM, который пытается отследить переименования, принципиально
сломан, если это не сделано по внутренним причинам (т.е.
deltas), именно потому, что переименования не имеют значения. Они тебе не помогают, и
они не то, что вас интересовало в любом случае .
Важно найти «откуда это взялось» и мерзавца
архитектура делает это очень хорошо - гораздо лучше, чем все остальное
там & Hellip;
Я обнаружил, что на это сообщение ссылается в этом блоге , что также может помочь вам найти жизнеспособное решение:
В сообщении Линус обрисовал, как идеальная система отслеживания контента может помочь вам найти, как блок кода пришел в текущую форму. Вы начинаете с текущего блока кода в файле, возвращаетесь в историю, чтобы найти коммит, который изменил файл. Затем вы проверяете изменение коммита, чтобы увидеть, изменен ли интересующий вас блок кода, так как коммит, изменяющий файл, может не затрагивать интересующий вас блок кода, а только некоторые другие части файл.
Когда вы обнаружите, что до фиксации в файле не было блока кода, вы проверяете коммит глубже. Вы можете обнаружить, что это одна из многих возможных ситуаций, включая:
- В коммите действительно появился блок кода. Автор коммита был изобретателем той классной функции, ради которой вы охотились за ее происхождением (или виновной стороны, которая представила ошибку); или
- Блок кода не существовал в файле, но пять его идентичных копий существовали в разных файлах, и все они исчезли после фиксации. Автор коммита реорганизовал дублированный код, введя одну вспомогательную функцию; или
- (как особый случай) До фиксации файл, который в данный момент содержит интересующий вас блок кода, не существовал, но существовал другой файл с почти идентичным содержимым и блок кода, которым вы являетесь заинтересованный, вместе со всем другим содержимым файла, существовавшим тогда, существовал в этом другом файле. Он ушел после коммита. Автор коммита переименовал файл, внеся в него небольшие изменения.
В git, лучший инструмент отслеживания контента Линуса еще не существует полностью автоматизированным способом. Но большинство важных ингредиентов уже доступно.
Пожалуйста, держите нас в курсе о вашем прогрессе в этом.