Как git собрать полное репо
Мне нужно перенести полное репо на новый не подключенный к сети компьютер, предпочтительно в виде единого файла. Пакет git позволяет выполнять операции в стиле git fetch
, git pull
в среде sneakernet, но, похоже, предполагает, что у вас уже есть рабочая версия репо на целевом компьютере.
Как правильно обращаться к
- Объедините все ветки в текущем репо
- Запустите новый репозиторий в целевом каталоге, то есть правильно установите корневой коммит
Я отправил патч для уточнения:
'git clone' can use any bundle created without negative refspecs
(e.g., 'new', but not 'old..new').
If you want to match 'git clone --mirror', which would clone other
refs such as 'refs/remotes/*', use '--all'.
If you want to provide the same set of refs that a clone directly
from the source repository would get, use '--branches --tags' for
the '<git-rev-list-args>'.
Ответы
Ответ 1
Каков правильный вызов для:
- Связывание всех ветвей в текущем репо
Простой:
$ git bundle create repo.bundle --all
Здесь repo.bundle
- имя файла пакета, который вы хотите создать. Обратите внимание, что --all
не будет включать ветки удаленного отслеживания... так же, как и обычный клон.
- Запустите новое репо в каталоге назначения, т.е. правильно установите корневую фиксацию.
Во-первых, clone
- это просто init
+ fetch
(+ administratorativia).
Во-вторых, вы можете использовать файл связки везде, где может использоваться URL-адрес репозитория, поэтому вы можете просто clone
из файла пакета:
$ git clone repo.bundle
Это создало бы repo
как репозиторий git.
Ответ 2
Сначала скопируйте репозиторий и включите опцию --mirror
.
git clone --mirror [email protected]:path/repo.git
Это гарантирует, что все удаленные ветки также являются локальными ветвями, готовыми для комплектации.
Затем запустите
git bundle create repo.bundle --all
, как описано в ответ от Якуба Нарбского
Ответ 3
Я бы предложил вам tar или zip папку .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