Как сделать полный пакет репозитория Git

Мне нужно перенести полное репо на новый не подключенный к сети компьютер, предпочтительно в виде единого файла. Пакет Git позволяет git fetch, git pull стиль работы в среде sneakernet, но, похоже, предполагается, что у вас уже есть рабочая версия репозитория на конечном компьютере.

Как правильно обращаться к:

  1. Объедините все ветви в текущем репо
  2. Запустите новый репозиторий в целевом каталоге, то есть правильно установите корневой коммит

4 ответа

Решение

Как правильно обращаться к:

  • Объедините все ветви в текущем репо

Просто:

$ git bundle create repo.bundle --all

Вот repo.bundle Имя файла пакета, который вы хотите создать. Обратите внимание, что --all не будет включать ветви удаленного слежения... как обычный клон тоже не будет.

  • Запустите новый репозиторий в целевом каталоге, то есть правильно установите корневой коммит

Первый, clone просто init + fetch (+ администрация).

Во-вторых, вы можете использовать пакетный файл везде, где может использоваться URL хранилища, так что вы можете просто clone из связанного файла:

$ git clone repo.bundle

Это создаст repo как репозиторий Git.

Сначала клонируйте репозиторий, и включите --mirror вариант.

git clone --mirror git@example.org:path/repo.git

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

Тогда беги

git bundle create repo.bundle --all как описано ответом Якуба Наребского

Я хотел бы предложить вам tar или заархивировать папку.git и просто распаковать ее в новом месте, а затем сделать git reset --hard HEAD, Все, что требуется для всех веток, находится в.git, и все, что вам нужно сделать, это настроить все пульты в файле.git/config или удалить их.

tar cf myrepo.tgz .git
cp myrepo.tgz [USB_STICK]
... move to new machine ...
mkdir myrepo && cd myrepo
tar xpf [USB_STICK]/myrepo.tgz
git reset --hard HEAD

С Git 2.34 (4 квартал 2021 г.) git blundle дополнительно уточняется:

См. Коммит 1d9c8da, коммит 0bb92f3 , , коммит 5c8273d (31 июля 2021 г.), автор: Ævar Arnfjör Bjarmason ( avar) .
(Слияние Junio ​​C Hamano - gitster- в коммите f19b275 , 24 августа 2021 г.)

коммит 9ab80ddbundle doc: подробно описать предпосылки объекта

Подписал: var Arnfjör Bjarmason

Выделите обсуждение «предварительных требований к объекту» в отдельный раздел и добавьте еще несколько примеров распространенных случаев.

См. 2e0afaf («Добавить git-bundle: перемещать объекты и ссылки по архиву», 2007-02-22, Git v1.5.1-rc1 - merge) для ознакомления с изменяемой здесь документацией.

теперь включает в свою справочную страницу :

См. Раздел «НЕОБХОДИМЫЕ ОБЪЕКТЫ» ниже.

теперь включает в свою справочную страницу :

НЕОБХОДИМЫЕ ОБЪЕКТЫ

При создании пакетов можно создать автономный пакет, который можно разделить в репозиторий без общей истории, а также предоставить отрицательные ревизии для исключения объектов, необходимых в более ранних частях истории.

Кормление ревизии, например, git bundle createсоздаст файл пакета, содержащий все объекты, доступные из ревизии. Этот пакет можно разделить в любом репозитории, чтобы получить полную историю, которая приводит к пересмотру:

       $ git bundle create full.bundle new

Диапазон ревизий, например, создаст файл пакета, который потребует ревизии old (и любые объекты, доступные из него), чтобы пакет мог быть "разделен":

       $ git bundle create full.bundle old..new

Автономный пакет без каких-либо предварительных условий может быть извлечен куда угодно, даже в пустой репозиторий, или быть клонирован из (т. Е. new, но нет old..new).

git bundleтеперь включает в свою справочную страницу :

Команду git bundle verify можно использовать, чтобы проверить, есть ли в вашем репозитории получателя необходимые предварительные коммиты для пакета.

Другие вопросы по тегам