Синхронизировать два репозитория Git без прямого подключения - PullRequest
2 голосов
/ 03 мая 2019

У меня есть два репозитория git, которые мне нужно синхронизировать, не имея прямого сетевого соединения между ними.

Я не могу использовать git fetch или git push как есть, потому что им обоим требуется это прямое соединение.Патч-файлы также не кажутся приемлемыми, потому что они теряют древовидную структуру коммитов.Хотя я обнаружил, что git использует git pack-objects и git unpack-objects для создания и использования pack-файлов.

Могу ли я каким-то образом заставить Git сгенерировать этот packfile для меня (учитывая, что я предоставляю диапазон фиксации Iхочешь) а потом его потреблять?Или, может быть, есть какой-то способ сохранить структуру в патчах?Или, может быть, есть какой-то другой подход?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Try git bundle .

Пакет работает как репозиторий только для чтения. Создать пучок веток master,

git bundle create foo.bundle master

Затем вы можете переместить foo.bundle на компьютер, где находится другой репозиторий, и прочитать / получить нужные метаданные.

cd <the_other_repository>
git checkout master
git pull <path_to_foo.bundle> master

# or maybe you want to cherry-pick a single commit
git fetch <path_to_foo.bundle> master
git cherry-pick <commit>
0 голосов
/ 03 мая 2019

Git-версия работает даже без удаленного репозитория, вы можете push и pull с вашего собственного компьютера. Существует одно правило: оба хранилища должны иметь общую историю коммитов, следующее легко. Вам просто нужно добавить новый remote с помощью

git remote add repo2 path/to/repo2/

Где path/to/repo2 - относительный путь к вашему другому хранилищу (например, ../../repo2).

Тогда:

git pull repo2 branch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...