Вы можете подделать то, что делает Git, и загрузить весь набор в виде одного файла и проанализировать оттуда. Самая большая проблема в том, что словари не упорядочены, поэтому ваши сравнения не всегда будут 1: 1. Список кортежей даст вам сравнение 1: 1. Если многое изменилось, это будет сложно.
Вот основной процесс, как вы можете это сделать.
- Начните с обоих списков кортежей с индексом 0.
- Сравните хэш каждого кортежа
hashlib.sha1(str(tuple1)) == hashlib.sha1(str(tuple2))
- Если они равны, запишите соответствующие индексы и добавьте 1 к каждому индексу и сравните снова
- Если они неравны, найдите на каждой стороне совпадение и запишите соответствующие индексы
- Если совпадений нет, вы можете предположить, что происходит вставка / обновление / удаление, и вернуться к нему позже
Вы можете сопоставить свои подходящие предметы как ориентиры, чтобы провести дальнейшее исследование тех, которые не соответствовали. Эта техника может применяться на каждом уровне, который вы углубляете. В итоге вы получите карту того, что отличается от отдельных значений.
Приятно то, что каждый из созданных срезов можно сравнивать параллельно, поскольку они не будут соответствовать друг другу ... если только вы не перемещаете вещи из одного файла в другой.
Опять же, может быть проще использовать библиотеку diff для сравнения двух наборов данных. С таким же успехом нельзя изобретать велосипед; даже если это может быть действительно блестящее колесо.
Выезд http://docs.python.org/library/difflib.html