Come faccio a comprimere una cartella ma escludo la sottocartella .git

147

Sto provando a creare un file zip da una cartella e vorrei escludere la sottocartella .git dal file zip risultante.

Sono passato alla cartella principale di quello che voglio comprimere ( chiamato bitvolution ) e sto facendo:

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

Ma non esclude la sottocartella .git .

Ho provato varie combinazioni, -x .git* , -x \.git/* , -x .git/\* , -x \.git/\* . Ho anche provato a utilizzare il percorso completo per l'argomento exclude ... ma non ci sono arrivato.

    
posta Tom 28.02.2011 - 21:38

5 risposte

180

L'espressione corretta è -x *.git* , quindi il comando completo dovrebbe essere:

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

Una spiegazione dal link :

  

L'incantesimo corretto è

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

Puoi anche aggiungere un valore --exclude=*.DS_Store* per escludere i fastidiosi file di metadati della directory di visualizzazione di Mac OS X.

     

Si noti che l'espressione passata a --exclude sta utilizzando l'intero percorso della directory relativa originale della stringa originale con cui confrontarsi. Quindi .svn/* di per sé non funziona; il carattere jolly in primo piano assicura che corrisponda alle .svn di directory ovunque nella struttura della directory.

    
risposta data Isaiah 28.02.2011 - 22:01
83

Se stai provando a comprimere un progetto che è memorizzato in Git, usa il comando git archive . Dalla directory di origine:

git archive -o bitvolution.zip HEAD

Puoi utilizzare qualsiasi ID di commit o tag anziché HEAD per archiviare il progetto in un determinato punto.

Se desideri aggiungere un prefisso (ad esempio una cartella di livello superiore) a ogni file:

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

Puoi anche regolare il livello di compressione tra 0 (nessuna compressione) e 9 (compressione massima) inclusi, ad esempio

git archive -o bitvolution.zip -9 HEAD

Per altre opzioni, consulta la pagina della guida ( git help archive ).

    
risposta data Blair 14.12.2011 - 12:08
20

Ho aggiunto il backslash:

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

man page about backslash:

  

Il backslash evita la sostituzione del nome file della shell, in modo tale che il nome   la corrispondenza viene eseguita tramite zip a tutti i livelli di directory.

    
risposta data Priit Tamboom 14.12.2011 - 11:13
4

Supponendo che hai git installato sulla macchina che stai facendo, puoi anche usare git stesso per creare il tuo archivio.

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

Se stai usando zsh, il comando dovrebbe essere simile a:

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

Se utilizzi: zip -r target_name.zip source_dir -x /*.git/* . senza 'regex', zsh elaborerà prima di zip run. Riceverai il messaggio di errore:

zsh: no matches found: /*.git/*
    
risposta data g10guang 08.06.2018 - 11:35

Leggi altre domande sui tag