Come posso comprimere una cartella ma escludere la sottocartella .git


196

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

Sono andato nella cartella principale di quella che voglio comprimere ( chiamata bitvolution ) e sto facendo:

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

Ma non esclude la .gitsottocartella.

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.

Risposte:


234

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

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

Una spiegazione da http://selfsolved.com/problems/zip-command-exclude-svn-director :

L'incantesimo corretto è

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

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

Si noti che l'espressione passata --excludeutilizza l'intero percorso della directory relativa originale come stringa originale per la corrispondenza. Quindi .svn/*da solo non funziona; il carattere jolly in primo piano assicura che corrisponda alle .svndirectory in qualsiasi punto dell'albero della directory.


20
Ho dovuto avvolgere il globo tra virgolette o sfuggire agli asterischi con barre rovesciate, come zip --exclude '*.git*' -r directory.zip directoryozip --exclude \*.git\* -r directory.zip directory
— Dmitry Minkovsky,

6
Se sei preoccupato di perdere altri file chiamati qualcosa. Qualcosa, puoi anche usare --exclude /.git*.
— Erin Call,

4
in ZSH ho dovuto aggiungere una barra rovesciata:-x \*.git\*
— DmitrySandalov il

2
La mia alternativa preferita a barre rovesciate e citazioni in zsh:noglob zip -r out.zip someFolder -x *someExcludedFolder*
— Sébastien,

Come si usa con tar? Non funziona con il comando tar.
— RN Kushwaha,

124

Se stai cercando di comprimere un progetto archiviato in Git, usa il git archivecomando. Dall'interno della directory di origine:

git archive -o bitvolution.zip HEAD

È possibile utilizzare qualsiasi ID di commit o tag anziché HEADarchiviare il progetto in un determinato punto.

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

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

Ad esempio, puoi anche regolare il livello di compressione tra 0 (nessuna compressione) e 9 (compressione massima) incluso

git archive -o bitvolution.zip -9 HEAD

Per altre opzioni, consultare la pagina di aiuto ( git help archive).


25
Non solo questo non includerà la cartella git, ma verrà anche escluso tutto ciò che si trova nel file gitignore. Signore, ottieni un voto.
— JoeMoe1984,

1
Proprio quello che stavo cercando di fare!
— Bjarte,

Sono in ritardo alla festa, ma questo mi ha lasciato senza fiato. Bella risposta!
— Tom,

mi chiedo perché non sia questa la risposta migliore
— nabtron

per me questo è stato il più grande TIL oggi ...
— Shawn Cicoria

27

Ho aggiunto una barra rovesciata:

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

pagina man sulla barra rovesciata:

La barra rovesciata evita la sostituzione del nome file della shell, in modo che la corrispondenza dei nomi venga eseguita da zip a tutti i livelli di directory.


anteporre asterischi con forcelle su Ubuntu 14.04 per escludere le directory
— Dimitry K

6

Supponendo che tu abbia installato git sul computer che stai facendo, puoi anche usare git stesso per creare il tuo archivio.

git archive --format=zip HEAD -o bitvolution.zip

2

Se stai usando zsh, il comando dovrebbe assomigliare a:

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

Se si utilizza: zip -r target_name.zip source_dir -x /*.git/*. senza 'regex', zsh verrà elaborato prima dell'esecuzione di zip. Verrà visualizzato un messaggio di errore:

zsh: no matches found: /*.git/*

Grazie! Questo è ciò che ha funzionato per me usando Bash su Ubuntu su Windows.
— Adriano Monecchi,

Non ho capito come funziona questo modello, ma ho lavorato per me su zsh.
— insegni il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.