К сожалению, нет: Git (и GitHub) обнаружение переименования основано на том, что имя файла в левом коммите не найдено вообще в правом коммите, а некоторые файлы в коммит с правой стороны не найден вообще при коммите с левой стороны.
То есть, если у нас есть это:
left right
----- -----
fileA fileA
fileB
fileC
fileD fileD
, то единственными кандидатами на переименование являются и . Файлы считаются «тем же файлом» (в паре или «идентифицированы» как глагол 1 ) , поскольку они имеют одинаковый путь и аналогичные файлы были идентифицированы по имени, оставив только B и C непарными.
Когда вы запускаете git diff
(или git show
или все, что вызывает git diff
внутри) вручную, вы можете добавьте параметр -B
, который позволяет вам «прервать» предварительно объявленное сопряжение на основе имени пути, если файлы достаточно различаются. 2 Таким образом, в командной строке вы можете возможно достичь того, что вы хотите. Но GitHub не предлагает вам вариант -B
.
1 То есть Git на данный момент касается проблемы метафизики идентичности . См. Корабль Тесея . Является ли версия X некоторого файла "тем же файлом", что и версия Y этого файла? Откуда мы знаем?
2 Опция -B
принимает два числа, оба из которых в конечном итоге выражаются в процентах индекса сходства. Первоначальные пары на основе имен предварительно разбиваются на отдельные «удалить старый файл левой стороны» и «добавить новый файл правой стороны», если индекс сходства содержимого двух файлов падает ниже порогового значения. Затем они становятся кандидатами на обнаружение переименования при условии, что -M
включено (возможно, через diff.renames
, который теперь является значением по умолчанию true вместо false по умолчанию). Если при обнаружении переименования не удаляются ни одна, ни обе пары, они будут объединены, если только индекс сходства не упадет ниже второго, обычно более мягкого, порога.
Аргументы -B
цифра c выражается в виде dis - сходства, а не сходства, но отличие версии X файла F от версии Y файла F составляет просто 100 минус сходство.