Как мерзавец отслеживает исходный код, перемещенный между файлами?

Геометрические вычисления для GIS или картографии, такие как нахождение края круга.

29
задан Thilo 13 November 2009 в 12:26
поделиться

2 ответа

Он их не отслеживает. В этом вся прелесть.

Git записывает только снимки всего дерева проекта: вот как все файлы выглядели до фиксации, а вот как они выглядели после. Как мы перешли отсюда туда, Git не волнует.

Это позволяет писать интеллектуальные инструменты после фиксации, чтобы извлечь информацию из этой фиксации. Например, обнаружение переименования в Git выполняется путем сравнения всех удаленных файлов со всеми новыми файлами и сравнения показателей попарного сходства. Если показатель подобия больше, чем x , они считаются переименованными, если он находится между y и x ( y ) , это считается переименованием + редактированием, и если оно ниже y , они считаются независимыми. Замечательно то, что вы, как «совершающий археолог», можете задолго до факта указать, какими должны быть x и y . Это не сработало бы, если бы фиксация просто записала «этот файл является переименованием этого файла».

Обнаружение перемещенного содержимого работает аналогично: вы разрезаете каждый файл на части, вычисляете метрики сходства между всеми фрагментами и затем можете сделать вывод, что этот фрагмент который был удален здесь, и этот очень похожий фрагмент, который был добавлен туда, на самом деле является тем же самым фрагментом, который был перемещен отсюда туда.

Однако, как сказал Тонфа в своем ответе, это очень дорого , поэтому обычно это не делается. Но это могло быть сделано, и в этом суть.

Кстати: это в значительной степени полная противоположность модели операционной трансформации, используемой Google Wave, EtherPad, Gobby, SubEthaEdit, ACE and Co.

вы разрезаете каждый файл на части, вычисляете показатели сходства между всеми фрагментами и затем можете сделать вывод, что этот фрагмент, который был удален здесь, и этот очень похожий фрагмент, который был добавлен туда, на самом деле являются тем же фрагментом, который был перемещен отсюда туда.

Однако, как сказал Тонфа в своем ответе, это очень дорого, поэтому обычно этого не делают. Но это могло быть сделано, и в этом суть.

Кстати: это в значительной степени полная противоположность модели операционной трансформации, используемой Google Wave, EtherPad, Gobby, SubEthaEdit, ACE and Co.

вы разрезаете каждый файл на части, вычисляете показатели сходства между всеми фрагментами и затем можете сделать вывод, что этот фрагмент, который был удален здесь, и этот очень похожий фрагмент, который был добавлен туда, на самом деле являются тем же фрагментом, который был перемещен отсюда туда.

Однако, как сказал Тонфа в своем ответе, это очень дорого, поэтому обычно этого не делают. Но это могло быть сделано, и в этом суть.

Кстати: это в значительной степени полная противоположность модели операционной трансформации, используемой Google Wave, EtherPad, Gobby, SubEthaEdit, ACE and Co.

вычислить показатели сходства между всеми фрагментами и затем сделать вывод, что этот фрагмент, который был удален здесь, и этот очень похожий фрагмент, который был добавлен, на самом деле являются тем же фрагментом, который был перемещен отсюда туда.

Однако, как сказал Тонфа в его ответе это очень дорого, поэтому обычно этого не делают. Но это могло быть сделано, и в этом суть.

Кстати: это в значительной степени полная противоположность модели операционной трансформации, используемой Google Wave, EtherPad, Gobby, SubEthaEdit, ACE and Co.

вычислить показатели сходства между всеми фрагментами и затем сделать вывод, что этот фрагмент, который был удален здесь, и этот очень похожий фрагмент, который был добавлен, на самом деле являются тем же фрагментом, который был перемещен отсюда туда.

Однако, как сказал Тонфа в его ответе это очень дорого, поэтому обычно этого не делают. Но это могло быть сделано, и в этом суть.

Кстати: это в значительной степени полная противоположность модели операционной трансформации, используемой Google Wave, EtherPad, Gobby, SubEthaEdit, ACE and Co.

44
ответ дан 28 November 2019 в 01:40
поделиться

Это чисто эвристический анализ. Он сравнивает расстояние между файлами и пытается найти совпадающие блоки. Но эта эвристика реализуется только тогда, когда код копируется или перемещается в новый файл (в противном случае проверка каждой пары файлов была бы слишком дорогостоящей).

3
ответ дан 28 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: