Git работает не с файлами, а со снимками.И протокол, который использует git, чтобы решить, что нужно скачать, работает с целыми коммитами сразу.Если вы инициализируете два репозитория с немного отличающимися файлами (или даже с идентичными файлами, но у них нет общих коммитов), тогда вам нужно будет загрузить все объекты при извлечении, даже если будет много дублированных деревьев и BLOB-объектовочистится позже.
Вы можете попробовать это, инициализируя два хранилища с одинаковыми файлами и наблюдая за местом на диске при выполнении этих команд:
du -sh .git
git remote add origin ../other
git fetch
du -sh .git
git prune
du -sh .git
The *Шаг 1006 * скопирует все данные, а шаг prune
удалит все дублированные объекты.
Если вы хотите иметь возможность эффективно извлекать данные, вам в какой-то момент придется доказать, что gitчто у вас есть некоторые общие коммиты, так как протокол push / fetch взаимодействует с использованием целых коммитов (и действительно с именами ветвей).Самый простой способ - просто куда-нибудь клонировать репозиторий git, и тогда вы сможете основываться на этом и эффективно синхронизировать различные изменения.
Однако, если у вас есть доступ к одному и тому же снимку SVN на нескольких серверах, выможет создавать идентичные коммиты, если вы фиксируете деревья, которые на 100% идентичны, и используете одну и ту же информацию для GIT_AUTHOR_NAME, GIT_AUTHOR_DATE и т. д.