Comment compresser un dossier mais exclure le sous-dossier .git

147

J'essaie de créer un fichier zip à partir d'un dossier et j'aimerais exclure le sous-dossier .git du fichier zip résultant.

Je suis allé dans le dossier parent de celui que je veux compresser ( appelé bitvolution ) et je le fais:

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

Mais cela n'exclut pas le sous-dossier .git .

J'ai essayé différentes combinaisons, -x .git* , -x \.git/* , -x .git/\* , -x \.git/\* . J'ai aussi essayé d'utiliser le chemin complet pour l'argument d'exclusion ... mais je n'y suis pas arrivé.

    
posée Tom 28.02.2011 - 21:38
la source

5 réponses

180

L'expression correcte est -x *.git* , donc la commande complète doit être:

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

Une explication de lien :

  

L'incantation correcte est

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

Vous pouvez également ajouter un fichier --exclude=*.DS_Store* pour exclure les fichiers de métadonnées d'affichage de répertoire Mac OS X agaçants.

     

Notez que l'expression transmise à --exclude utilise l'intégralité du chemin du répertoire relatif d'origine en tant que chaîne d'origine à comparer. Donc, .svn/* par lui-même ne fonctionne pas; Le caractère générique devant permet de faire correspondre les répertoires .svn n'importe où dans l'arborescence.

    
réponse donnée Isaiah 28.02.2011 - 22:01
la source
83

Si vous essayez de compresser un projet stocké dans Git, utilisez la commande git archive . Depuis le répertoire source:

git archive -o bitvolution.zip HEAD

Vous pouvez utiliser n'importe quel identifiant de validation ou de tag au lieu de HEAD pour archiver le projet à un moment donné.

Si vous souhaitez ajouter un préfixe (par exemple, un dossier de niveau supérieur) à chaque fichier:

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

Vous pouvez également ajuster le niveau de compression entre 0 (pas de compression) et 9 (compression maximale) inclus, par exemple

git archive -o bitvolution.zip -9 HEAD

Pour d'autres options, consultez la page d'aide ( git help archive ).

    
réponse donnée Blair 14.12.2011 - 12:08
la source
20

J'ai ajouté une barre oblique inverse:

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

page de manuel sur la barre oblique inverse:

  

La barre oblique inverse évite la substitution du nom du shell, de sorte que le nom   la correspondance est effectuée par zip à tous les niveaux de répertoire.

    
réponse donnée Priit Tamboom 14.12.2011 - 11:13
la source
4

En supposant que git est installé sur la machine que vous utilisez, vous pouvez également utiliser git lui-même pour créer votre archive.

git archive --format=zip HEAD -o bitvolution.zip
    
réponse donnée Tatu Lahtela 14.12.2011 - 12:12
la source
0

Si vous utilisez zsh, la commande devrait ressembler à:

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

Si vous utilisez: zip -r target_name.zip source_dir -x /*.git/* . sans 'regex', zsh traitera avant le zip. Vous aurez un message d'erreur:

zsh: no matches found: /*.git/*
    
réponse donnée g10guang 08.06.2018 - 11:35
la source

Lire d'autres questions sur les étiquettes