Tar uma pasta sem arquivos .git?

12

Se eu tar uma pasta que é um repositório git, posso fazê-lo sem incluir os arquivos relacionados .git ? Se não, como eu faria isso através de um comando?

    
por chrisjlee 13.08.2011 / 00:05

4 respostas

16

Dê uma olhada primeiro em 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
    
por 13.08.2011 / 00:13
16

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, então use git archive .

Se você quer especificamente excluir .git , mas inclui todo o resto, no Linux ou FreeBSD ou OSX ou Cygwin, o tar tem uma opção simples para excluir um diretório:

tar -c --exclude .git -f - foo | gzip >foo.tgz

Com o GNU tar (por exemplo, no Linux ou no Cygwin), você pode encurtar isso 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
    
por 13.08.2011 / 00:56
12

Resposta mais simples: adicione --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.

    
por 10.02.2016 / 19:00
0

Graças a resposta que obtive em uma de minhas perguntas , descobri outra solução. Então, para ser completamente completo, aqui está uma solução fazendo uso de find :

find . -path './.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

E se você quiser excluir possíveis pastas .git dentro (sub) + pasta:

find . -path '*/.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

O último também pode ser alcançado por meio de:

find . -type d -name '.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

Bastante útil se você puder usar as outras técnicas de filtragem de find , por exemplo data de modificação, permissões,…

(Como os nomes de arquivo geralmente bem formados são assumidos, caso contrário, você precisará usar bytes nulos como separadores, o que pode significar -print0 para find e --null para tar se suportado.)

    
por 29.10.2016 / 00:26

Tags