Como faço para zipar uma pasta, mas excluo a subpasta .git

144

Estou tentando criar um arquivo zip de uma pasta e gostaria de excluir a subpasta .git do arquivo zip resultante.

Eu fui para a pasta pai do que eu quero zipar ( chamado bitvolution ) e estou fazendo:

zip -r bitvolution.zip bitvolution -x ".git"

Mas isso não exclui a subpasta .git .

Eu tentei várias combinações, -x .git* , -x \.git/* , -x .git/\* , -x \.git/\* . Eu também tentei usar o caminho completo para o argumento de exclusão ... mas simplesmente não cheguei lá.

    
por Tom 28.02.2011 / 21:38

5 respostas

174

A expressão correta é -x *.git* , então o comando completo deve ser:

zip -r bitvolution.zip bitvolution -x *.git*

Uma explicação de link :

  

O encantamento correto é

zip -9 -r --exclude=*.svn*  foo.zip [directory-to-compress]
     

Você também pode adicionar um --exclude=*.DS_Store* para excluir os irritantes arquivos de metadados de exibição do diretório do Mac OS X.

     

Observe que a expressão transmitida para --exclude está usando todo o caminho do diretório relativo original como a string original a ser correspondida. Então .svn/* por si só não funciona; o caractere curinga na frente garante que ele corresponda a .svn diretórios em qualquer lugar na árvore de diretórios.

    
por Isaiah 28.02.2011 / 22:01
77

Se você estiver tentando compactar um projeto armazenado no Git, use o comando git archive . De dentro do diretório de origem:

git archive -o bitvolution.zip HEAD

Você pode usar qualquer ID de confirmação ou tag em vez de HEAD para arquivar o projeto em um determinado ponto.

Se você quiser adicionar um prefixo (por exemplo, uma pasta de nível superior) a todos os arquivos:

git archive -o bitvolution.zip --prefix=bitvolution/ HEAD

Você também pode ajustar o nível de compactação entre 0 (sem compactação) e 9 (compactação máxima), inclusive, por exemplo

git archive -o bitvolution.zip -9 HEAD

Para outras opções, consulte a página de ajuda ( git help archive ).

    
por Blair 14.12.2011 / 12:08
19

Adicionei barra invertida:

zip -r bitvolution.zip bitvolution -x \*.git\*

página man sobre barra invertida:

  

A contrabarra evita a substituição do nome do arquivo da shell, de modo que o nome   A correspondência é executada por zip em todos os níveis de diretório.

    
por Priit Tamboom 14.12.2011 / 11:13
3

Supondo que você tenha o git instalado na máquina que você está fazendo, você também pode usar o próprio git para criar seu arquivo.

git archive --format=zip HEAD -o bitvolution.zip
    
por Tatu Lahtela 14.12.2011 / 12:12
0

Se você estiver usando zsh, o comando deverá se parecer com:

zip -r target_name.zip source_dir -x '/*.git/*'

Se você usar: zip -r target_name.zip source_dir -x /*.git/* . sem 'regex', o zsh será processado antes da execução do zip. Você receberá uma mensagem de erro:

zsh: no matches found: /*.git/*
    
por g10guang 08.06.2018 / 11:35

Tags