Domanda Come faccio a riavvolgere una cartella ma escludo la sottocartella .git


Sto cercando di creare un file zip da una cartella e vorrei escludere il file .git sottocartella dal file zip risultante.

Sono andato alla cartella principale di quello che voglio fare zip (chiamato bitvolution) e sto facendo:

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

Ma non esclude il .git sottocartella.

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.


149
2018-02-28 20:38


origine




risposte:


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 un
--exclude=*.DS_Store* per escludere i fastidiosi file di metadati della directory di Mac OS X.

Si noti che l'espressione è passata a --exclude sta utilizzando l'intero percorso di directory relativo originale come stringa originale da abbinare. Così .svn/* da solo non funziona; il carattere jolly di fronte assicura che corrisponda .svn directory ovunque nell'albero delle directory.


182
2018-02-28 21:01



Ho dovuto avvolgere il glob tra virgolette o sfuggire agli asterischi con barre inverse, come zip --exclude '*.git*' -r directory.zip directory o zip --exclude \*.git\* -r directory.zip directory - Dmitry Minkovsky
Se sei preoccupato di perdere altri file chiamati qualcosa. Qualunque cosa, puoi anche usarlo --exclude /.git*. - Erin Call
in ZSH ho dovuto aggiungere un backslash: -x \*.git\* - DmitrySandalov
La mia alternativa preferita alle backslash e alle virgolette 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


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

git archive -o bitvolution.zip HEAD

È possibile utilizzare qualsiasi ID di commit o tag invece di HEAD archiviare il progetto a un certo punto.

Se si desidera aggiungere un prefisso (ad es. 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)

git archive -o bitvolution.zip -9 HEAD

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


84
2017-12-14 11:08



Non solo non includerà la cartella git ma anche tutto ciò che è nel file gitignore sarà escluso. Lei signore ottiene un upvote. - JoeMoe1984
Proprio quello che stavo cercando di fare! - Bjarte
Sono in ritardo per la festa, ma questo mi ha assolutamente sconvolto. Bella risposta! - Tom
Mi chiedo perché non è questa la migliore risposta - nabtron
per me questo è stato il più grande TIL oggi ... - Shawn Cicoria - MSFT


Ho aggiunto il backslash:

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

pagina man di backslash:

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


21
2017-12-14 10:13



per la prima volta asterischi con forcelle per me su Ubuntu 14.04 per escludere le directory - Dimitry K


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

5
2017-12-14 11:12





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

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

Se usi: 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/*

1
2018-06-08 09:35



Grazie! Questo è quello che ha funzionato per me usando Bash su Ubuntu su Windows. - Adriano Monecchi