Создайте зеркальный репозиторий Git без переноса объектов - PullRequest
4 голосов
/ 24 января 2010

У меня большой набор файлов (50 ГБ), и они находятся на двух хостах на большом расстоянии, и я хочу поместить их в несколько репозиториев Git, чтобы каждый из них являлся зеркальным репозиторием репо с другой стороны. Но я не хочу передавать файлы по сети, потому что это займет много времени (50-60 часов) и не нужно, поскольку файлы уже находятся на обеих сторонах.

Моя идея состояла в том, чтобы создать репозиторий Git на каждой стороне, добавить все файлы с каждой стороны в локальное репо и затем выполнить git-pull из одного в другой. Я думал, что Git будет достаточно умен, чтобы знать, что файлы (объекты) идентичны, и не передавать их. Но, похоже, это не потому, что на небольшой выборке требуется много времени (в основном на этапе «Распаковка объектов»), и это максимизирует сетевое соединение между ними. Так что мне кажется, что он передает объекты Git без необходимости.

У кого-нибудь есть идеи, как это сделать без фактической передачи файлов?

Спасибо!

Ответы [ 4 ]

1 голос
/ 25 января 2010

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

Что я могу думать сейчас, так это:

сделать (начальный) коммит с одной стороны. обратите внимание на его хэш. найдите хеш в папке .git/objects/. скопируйте файл на другой компьютер. если у другого компьютера есть дерево с таким же идентификатором, оно должно работать

1 голос
/ 24 января 2010

Интересно, это может сработать, поскольку содержимое больших файлов одинаково (я полагаю) и должно создавать один и тот же объектный файл на обоих концах.

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

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

0 голосов
/ 25 января 2010

Какой протокол вы используете, git или Http?

Git медленнее при использовании протокола http . Если ваш единственный вариант - http и вам нужен DVCS, вы можете попробовать Mercurial .

Если все, что вам нужно сделать, это синхронизировать две удаленные папки, вы можете взглянуть на Beyond Compare

0 голосов
/ 24 января 2010

Я использовал sneakernet (ну, carnet): возьмите одно из своих местных git деревьев и запишите все это на DVD. На удаленной стороне скопируйте DVD на диск. Затем, если необходимо, отредактируйте раздел конфигурации .git / config [remote "origin"], чтобы репозиторий все еще мог получить доступ к исходному.

...