Каждый коммит в git хранит совершенно новый большой двоичный объект для файла, даже если изменение было текстовым файлом, состоящим из одного символа (в дальнейшем это может быть просто дельта и т.д.)
И вообще не стоит беспокоиться о том, как и что хранит git (а место на диске дешево)
Обновление:
Если вы просто беспокоитесь о разнице, которую вы видите, когда файл перезаписывается, вы можете использовать опцию -B с diff:
-B [<n>][/<m>
]
--break-переписывает [=[<n>][/<m>]]
Разбить полный переписать изменения на пары удаления и создания. это
служит двум целям:
Это влияет на способ изменения, равный общему переписыванию файла
не как серия удаления и вставки смешаны вместе с очень
несколько строк, которые соответствуют тексту как контекст, но как
однократное удаление всего старого с последующей однократной вставкой
все новое, и число m контролирует этот аспект опции -B
(по умолчанию 60%). -B / 70% указывает, что менее 30% оригинала
должен остаться в результате для git, чтобы считать его полностью переписанным
(т. е. в противном случае полученный патч будет серией удалений и
вставка, смешанная с контекстными строками).
При использовании с -M полностью переписанный файл также считается
источник переименования (обычно -M рассматривает только исчезнувший файл
как источник переименования), а число n управляет этим аспектом
опция -B (по умолчанию 50%). -B20% указывает, что изменение с
добавление и удаление по сравнению с 20% или более от размера файла
право быть выбранным в качестве возможного источника переименования в
другой файл.
Существуют более сложные методы, такие как использование filter-branch и т. Д. Для удаления (и изменения) истории, но я не буду рекомендовать их в этом случае.