Como faço backup de um repositório git?

26

Estou planejando mudar de SVN para git. Com o svn, apenas copio minha pasta de repositório quando quero fazer o backup. No entanto, o git não tem um, o que devo fazer?

Devo criar um clone em uma unidade separada e atualizar retirando do meu projeto? Então eu posso gravar / arquivar esta pasta e ela terá toda a história?

Provavelmente isso é óbvio, mas quero ter certeza de quando se trata de backups. Eu ainda finjo que existe um repositório raiz.

Sathyajith Bhat
fonte
Veja também: Faça backup de um repositório GitHub (as respostas também funcionam para projetos não-GitHub)
Martin Thoma 29/04

Respostas:

14

Você acabou de copiar. git faz usar uma pasta de repo, é apenas escondido da vista normais diretório. (A pasta é nomeada .gitem sistemas * nix, portanto só aparece se você usar ls -a. Suponho que ela defina o atributo "oculto" no Windows, mas nunca usei o git em um ambiente Windows, portanto, não tenho certeza sobre como é tratado lá.)

Dave Sherohman
fonte
Há alguns arquivos de projeto no meu tronco que eu ignoro. Então eu literalmente posso copiá-lo? (vou assumir que funciona da mesma maneira que o linux). Então o clone é apenas uma cópia do arquivo? Eu acho que se eu puxar todos os dados que eu quero está na pasta. Eu verifiquei existem arquivos .git mas existem arquivos .svn no meu svn tronco e não precisava pensar para verificar se os dados de história estava lá
2
No Windows, ainda está .git, com o atributo "Oculto".
quer
1
@ acidzombie24: O .gitdiretório contém todo o estado do repositório, incluindo o histórico. (Essa é a parte "distribuída".)
grawity
5
@grawity: a sua mais a parte "autônoma", a parte distribuída é quando você troca diffs entre os repositórios selfcontained :)
akira
19

A resposta do akira está correta, mas você pode adicionar --mirror para criar um repositório simples (para um backup um pouco menor).

Usamos a seguinte estratégia (quase exatamente):

git clone --mirror yourrepo backup.repo
tar cjf backup.repo.tar.bz2 backup.repo
scp backup.tar.bz2 ssh://somewhereelse

Em seguida, para recuperar do seu backup:

tar xjf backup.repo.tar.bz2
git clone backup.repo yourrepo
akirisol
fonte
2
Isso é útil, obrigado. Como uso o repositório de backup para restaurar a árvore de trabalho?
Jonathan Day
10

Estou usando o pacote git . Para criar um arquivo de cópia (um arquivo de backup), execute:

git bundle create backup.bundle master

Para restaurar o repositório com o mestre da filial, basta clonar o arquivo backup.bundle:

git clone backup.bundle -b master my-project
MariuszS
fonte
2

crie um novo clone em outro lugar:

 % git clone yourepo somewhereelse

btw, o git tem uma pasta de repositório, você pode localizá-la na sua cópia de trabalho abaixo do subdiretório .git. toda cópia de trabalho tem essa "pasta de repo".

akira
fonte
10
Eu não acho que um clone é aceitável como um backup, uma vez que é não uma cópia exata. Pelo menos as ramificações remotas do repositório clonado estarão ausentes no clone e as ramificações do repositório clonado aparecerão como ramificações remotas no clone.
sleske