Respostas:
Dê uma olhada primeiro git help archive
. archive
é um comando git que permite criar arquivos contendo apenas arquivos rastreados pelo git. Provavelmente o que você está procurando. Um exemplo listado no final da página do manual:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Resposta mais simples: adicionar --exclude-vcs
--exclude-vcs
Isso exclui todos os diretórios do sistema de controle de versão
Pessoalmente eu uso
tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs
então tudo que você precisa fazer é adicionar o --exclude-vcs no final do comando.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Se você deseja que o archive inclua os arquivos rastreados pelo git, mas não o próprio repositório git ou qualquer arquivo gerado ou não rastreado, usegit archive
.
Se você deseja excluir especificamente, .git
mas inclui todo o resto, no Linux ou FreeBSD ou OSX ou Cygwin, o tar possui uma opção simples para excluir um diretório:
tar -c --exclude .git -f - foo | gzip >foo.tgz
Com o GNU tar (ou seja, no Linux ou Cygwin), você pode reduzi-lo para tar czf foo.tgz --exclude .git foo
.
A maneira POSIX de criar arquivos é pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
compila em qualquer sistema onde tar
não está disponível? :-)
tar
não há --exclude
opção, como o OpenBSD (que duplica a s
opção do pax , mas essa não é uma extensão comum da sintaxe do comando tar).
Graças a uma resposta que recebi em uma das minhas perguntas , descobri outra solução. Portanto, por uma questão de integridade, aqui está uma solução que utiliza find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
E se você deseja excluir possíveis .git
pastas dentro da (sub) + pasta:
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
O último também pode ser alcançado através de:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Bastante útil se você puder fazer uso de outras técnicas de filtragem de find
, por exemplo, data de modificação, permissões,…
(Como geralmente são assumidos nomes de arquivo bem-formados, caso contrário, você precisa usar bytes nulos como separadores, o que pode significar -print0
para find
e --null
para tar
se houver suporte.)