Questão Como faço para compactar uma pasta, mas excluo a subpasta .git


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

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

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

Mas isso não exclui o .git sub-pasta.

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á.


149
2018-02-28 20:38


origem




Respostas:


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

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

Uma explicação de http://selfsolved.com/problems/zip-command-exclude-svn-director:

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 arquivos de metadados de exibição do diretório do Mac OS X.

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


182
2018-02-28 21:01



Eu tive que embrulhar o glob entre aspas ou escapar dos asteriscos com barras invertidas, como zip --exclude '*.git*' -r directory.zip directory ou zip --exclude \*.git\* -r directory.zip directory - Dmitry Minkovsky
Se você está preocupado em perder outros arquivos chamados something.gitwhatever, você também pode usar --exclude /.git*. - Erin Call
no ZSH eu tive que adicionar uma barra invertida: -x \*.git\* - DmitrySandalov
Minha alternativa preferida para barras invertidas e aspas em zsh: noglob zip -r out.zip someFolder -x *someExcludedFolder* - Sébastien
Como usá-lo com alcatrão? Não está funcionando com o comando tar. - RN Kushwaha


Se você está tentando fechar um projeto que está armazenado no Git, use o git archive comando. 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 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).


84
2017-12-14 11:08



Não apenas isso não incluirá a pasta git, mas também qualquer coisa que esteja no arquivo gitignore será excluída também. Você senhor obter um upvote. - JoeMoe1984
Apenas o que eu estava procurando fazer! - Bjarte
Estou atrasado para a festa, mas isso absolutamente me surpreendeu. Ótima resposta! - Tom
Eu me pergunto por que esta não é a melhor resposta - nabtron
para mim este foi o maior TIL hoje ... - Shawn Cicoria - MSFT


Eu adicionei barra invertida:

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

página man sobre barra invertida:

A barra invertida 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.


21
2017-12-14 10:13



prefixo asteriscos com slash forks para mim no Ubuntu 14.04 para excluir diretórios - Dimitry K


Assumindo 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

5
2017-12-14 11:12





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/*

1
2018-06-08 09:35



Obrigado! Isso é o que funcionou para mim usando Bash no Ubuntu no Windows. - Adriano Monecchi