Vraag Hoe zip-up ik een map, maar sluit de .git-submap uit


Ik probeer een zipbestand te maken vanuit een map en ik wil het bestand uitsluiten .git submap uit het resulterende zipbestand.

Ik ben naar de bovenliggende map gegaan van degene die ik wil rippen (genaamd bitvolution) en ik ben aan het doen:

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

Maar het sluit het .git sub-map.

Ik heb verschillende combinaties geprobeerd, -x .git*, -x \.git/*, -x .git/\*, -x \.git/\*. Ik heb ook geprobeerd het volledige pad te gebruiken voor het uitsluitingsargument ... maar is daar gewoon niet gekomen.


149
2018-02-28 20:38


oorsprong




antwoorden:


De juiste uitdrukking is -x *.git*, dus het volledige commando zou moeten zijn:

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

Een verklaring van http://selfsolved.com/problems/zip-command-exclude-svn-director:

De juiste incantatie is

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

U kunt ook een toevoegen
--exclude=*.DS_Store* om de vervelende Mac OS X-map metagegevensbestanden uit te sluiten.

Merk op dat de uitdrukking is doorgegeven aan --exclude gebruikt het volledige relatieve pad van de oorspronkelijke map als de originele reeks waarmee wordt vergeleken. Zo .svn/* op zichzelf werkt niet; het jokerteken ervoor zorgt ervoor dat het overeenkomt .svn mappen overal in de mappenboom.


182
2018-02-28 21:01



Ik moest de glob in quotes inpakken of aan de sterretjes ontsnappen met backslashes, zoals zip --exclude '*.git*' -r directory.zip directory of zip --exclude \*.git\* -r directory.zip directory - Dmitry Minkovsky
Als je je zorgen maakt over het verliezen van andere bestanden die iets worden genoemd. Wat dan ook, je kunt ook gebruiken --exclude /.git*. - Erin Call
in ZSH moest ik een backslash toevoegen: -x \*.git\* - DmitrySandalov
Mijn voorkeursalternatief voor backslashes en citaten in zsh: noglob zip -r out.zip someFolder -x *someExcludedFolder* - Sébastien
Hoe het te gebruiken met teer? Het werkt niet met tar-commando. - RN Kushwaha


Als u een project dat in Git is opgeslagen probeert in te tikken, gebruik dan de git archive opdracht. Vanuit de bronmap:

git archive -o bitvolution.zip HEAD

U kunt elk commit- of tag-ID gebruiken in plaats van HEAD om het project op een bepaald moment te archiveren.

Als u een voorvoegsel (bijvoorbeeld een map op het hoogste niveau) aan elk bestand wilt toevoegen:

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

U kunt ook het compressieniveau aanpassen tussen 0 (geen compressie) en 9 (maximale compressie) inclusief, bijvoorbeeld

git archive -o bitvolution.zip -9 HEAD

Voor andere opties, zie de helppagina (git help archive).


84
2017-12-14 11:08



Dit zal niet alleen de git-map bevatten, maar ook alles wat in het gitignore-bestand zit, zal worden uitgesloten. U, mijnheer, krijgt een upvote. - JoeMoe1984
Precies wat ik zocht! - Bjarte
Ik ben te laat op het feest maar dit heeft me absoluut weggeblazen. Goed antwoord! - Tom
ik vraag me af waarom is dit niet het beste antwoord - nabtron
voor mij was dit de beste TIL vandaag ... - Shawn Cicoria - MSFT


Ik heb backslash toegevoegd:

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

man pagina over backslash:

De backslash vermijdt de shell-bestandsnaamvervanging, zodat de naam   matching wordt uitgevoerd door zip op alle directoryniveaus.


21
2017-12-14 10:13



vooruitstekende asterisken met slash-vorken voor mij op Ubuntu 14.04 om mappen uit te sluiten - Dimitry K


Ervan uitgaande dat je git op de machine hebt geïnstalleerd, doe je dit, je kunt ook git zelf gebruiken om je archief te maken.

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

5
2017-12-14 11:12





Als u zsh gebruikt, ziet het commando er als volgt uit:

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

Als je gebruikt: zip -r target_name.zip source_dir -x /*.git/*. zonder 'regex', zal zsh vóór ziprun verwerken. U krijgt een foutmelding:

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

1
2018-06-08 09:35



Bedankt! Dat is wat voor mij werkte met Bash op Ubuntu op Windows. - Adriano Monecchi