Preciso transferir um repositório completo para uma nova máquina sem rede, de preferência como uma entidade de arquivo único. O pacote git permite que um git fetch
, git pull
operação estilo em um ambiente sneakernet mas parece assumir que você já tem uma versão de trabalho do repo na máquina de destino.
Qual é a invocação certa para:
- Empacote todas as filiais no repositório atual
- Inicie o novo repo no diretório de destino, ou seja, instale o commit root corretamente
Enviei um patch upstream para esclarecer:
`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>`.
Portanto, $ git bundle create repo.bundle --branches --tags
melhor corresponde à clonagem.
$ git bundle create repo.bundle --all
irá fornecer uma imagem espelhada de sua máquina de origem, incluindo seus refs remotos.
--all
opções não estão em minha página de manual parabundle
(estou procurando a versão 1.7.6.msysgit.0), nem o uso do arquivo .bundle na seção de URLs paraclone
. Isso me dá mais confiança para recomendar seu uso.git bundle create <file> <git-rev-list-args>
. Correrman git-rev-list
(ouman git-log
) lhe daria--all
. Mas eu concordo que deveria ser mais visível na documentação do comando bundle.git show-ref
", o que não inclui [list] as opções de git-rev-list.git-rev-list-args
É assim que você seleciona referências que são mostradas porgit show-ref
comando.--all
incluiu branches de rastreamento remoto para mim (git 2.1.4). Eu poderia verrefs/remotes/origin/*
comgit bundle list-heads bundlefile
ougit ls-remote bundlefile
. Embora retirá-los do pacote seja um pouco complicado.Primeiro clone o repositório e inclua a
--mirror
opção.git clone --mirror [email protected]:path/repo.git
Isso garante que todas as ramificações remotas também sejam agências locais prontas para agrupamento.
Então corra
git bundle create repo.bundle --all
conforme descrito pela resposta de Jakub Narębskifonte
Eu sugeriria que você tar ou zipar a pasta .git e simplesmente descompactá-la no novo local e fazer
git reset --hard HEAD
. Tudo o que é necessário para todos os branches está em .git e tudo o que você precisa fazer é ajustar quaisquer controles remotos no arquivo .git / config ou removê-los.fonte