git ready

dicas diárias para o noob ao guru
por Nick Quaranto, traduzido pela comunidade RailsBr

exportando o seu repositório

publicado em 29 Jan 2009

Nos ultimos posts tivemos a dica compartilhando modificações mas isso incluia todo o histórico do seu repositório. E se você quiser apenas exportar modificações de certos commits? Ou apenas uma pasta? E se você quiser fazer um arquivo do seu repositório para backup? Sem medo, o Git pode fazer isso tudo e mais. Obrigado ao Stack Overflow por me dar algumas dicas úteis para adicionar nesse post.

Se o que você precisa é apenas fazer um backup rápido do seu repositório, um git archive será útil. Se você quiser um arquivo zip com os arquivos do seu repositório:

git archive HEAD --format=zip > archive.zip

O comando archive normalmente empacota repositórios em tarballs, então você pode facilmente utilizar o pipe e comprimir com seu programa de compressão favorito:

git archive HEAD | gzip > archive.tar.gz

Você também pode usar o comando archive em um repositório remoto usando --remote=<repo>. Apenas tome cuidado pois isso não vai funcionar com repositórios do GitHub, e eles recomendam usar o botão download ao invés. Com qualquer outro repositório remoto isso deve funcionar bem, veja a manpage se você tiver problemas.

E se você não quiser uma versão comprimida dos arquivos? Isso é possivel graças ao comando checkout-index. Basicamente, ele copia tudo que está no seu index para uma pasta diferente. A exportação do seu repositório seria assim:

git checkout-index -f -a --prefix=/path/to/folder/

A opção -f sobrescreve arquivos, e a opção -a significa todos os arquivos e pastas. Apenas não esqueça da barra no final da opção --prefix, pois é muito importante! Omitindo você fará com que o comando pense que você quer colocar todos os nomes de arquivos com esse argumento como prefixo.

Se você quiser apenas exportar uma pasta ou um arquivo específico (nesse caso tudo que está na pasta bin/ e o readme):

git checkout-index -f --prefix=/path/to/folder/ bin/* README.textile

Otimo! Você também pode encadear esse comando com o find se você quiser exportar todos os arquivos header por exemplo. Veja tudo o que você pode fazer com checkout-index na sua manpage. Daniel Schierbeck colocou esse processo em um pequeno script chamado git-export e vale a pena dar uma olhada se você precisar fazer isso.

(Este artigo foi generozamente traduzido por Willian Molinari)