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


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

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

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

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

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


149
2018-02-28 20:38


origine




Réponses:


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

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

Une explication de http://selfsolved.com/problems/zip-command-exclude-svn-director:

La bonne incantation est

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

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

Notez que l'expression passée à --exclude utilise l'intégralité du chemin de répertoire relatif d'origine en tant que chaîne d'origine à comparer. Alors .svn/* par lui-même ne fonctionne pas; le caractère générique devant lui assure qu'il correspond .svn répertoires n'importe où dans l'arborescence.


182
2018-02-28 21:01



J'ai dû envelopper le glob en guillemets ou échapper aux astérisques avec des barres obliques inverses, comme zip --exclude '*.git*' -r directory.zip directory ou zip --exclude \*.git\* -r directory.zip directory - Dmitry Minkovsky
Si vous craignez de perdre d’autres fichiers appelés something.gitwhatever, vous pouvez également utiliser --exclude /.git*. - Erin Call
dans ZSH je devais ajouter une barre oblique inverse: -x \*.git\* - DmitrySandalov
Mon alternative préférée aux barres obliques inverses et aux guillemets dans zsh: noglob zip -r out.zip someFolder -x *someExcludedFolder* - Sébastien
Comment l'utiliser avec du goudron? Son ne fonctionne pas avec la commande tar. - RN Kushwaha


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

git archive -o bitvolution.zip HEAD

Vous pouvez utiliser n'importe quel identifiant de validation ou tag au lieu de HEAD 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).


84
2017-12-14 11:08



Non seulement cela n'inclura pas le dossier git, mais tout ce qui se trouve dans le fichier gitignore sera également exclu. Vous monsieur obtenez un vote. - JoeMoe1984
Juste ce que je cherchais à faire! - Bjarte
Je suis en retard à la fête, mais cela m'a absolument bouleversé. Très bonne réponse! - Tom
Je me demande pourquoi ce n'est pas la meilleure réponse - nabtron
pour moi c'était le plus grand TIL aujourd'hui ... - Shawn Cicoria - MSFT


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 de nom de shell, de sorte que le nom   la correspondance est effectuée par zip à tous les niveaux de répertoire.


21
2017-12-14 10:13



en ajoutant des astérisques avec des barres obliques sur Ubuntu 14.04 pour exclure les répertoires - Dimitry K


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

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

5
2017-12-14 11:12





Si vous utilisez zsh, la commande devrait ressembler à ceci:

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

Si tu utilises: 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/*

1
2018-06-08 09:35



Merci! C'est ce qui a fonctionné pour moi en utilisant Bash sur Ubuntu sous Windows. - Adriano Monecchi