Bir klasörü nasıl sıkıştırırım ancak .git alt klasörünü hariç tutarım


194

Bir klasörden bir zip dosyası oluşturmaya çalışıyorum ve .gitalt klasörü ortaya çıkan zip dosyasından çıkarmak istiyorum .

Ziplemek istediğim birinin ( bitvolution ) ana klasörüne gittim ve yapıyorum:

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

Ancak .gitalt klasörü dışlamaz .

Ben, çeşitli kombinasyonları denedim -x .git*, -x \.git/*, -x .git/\*, -x \.git/\*. Dışlama bağımsız değişkeni için tam yolu kullanmayı da denedim ... ... ama oraya ulaşamadım.

Yanıtlar:


232

Doğru ifade, -x *.git*tam komut şöyle olmalıdır:

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

Http://selfsolved.com/problems/zip-command-exclude-svn-director adresinden bir açıklama :

Doğru teşvik

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

Ayrıca
--exclude=*.DS_Store*can sıkıcı Mac OS X dizin ekranı meta veri dosyalarını dışlamak için bir ekleyebilirsiniz .

İletilen ifadenin --exclude, orijinal göreli dizin yolunun tamamını eşleşecek orijinal dize olarak kullandığına dikkat edin. Yani .svn/*kendi başına çalışmıyor; öndeki joker karakter .svn, dizin ağacındaki herhangi bir yerdeki dizinlerle eşleşmesini sağlar .


20
Glob'u tırnaklara sarmak ya da ters eğik çizgilerle yıldızlardan kaçmak zorunda kaldım, zip --exclude '*.git*' -r directory.zip directoryya dazip --exclude \*.git\* -r directory.zip directory
— Dmitry Minkovsky

6
Bir şey olarak adlandırılan diğer dosyaları kaybetme konusunda endişeleriniz varsa, kullanabilirsiniz --exclude /.git*.
— Erin

4
-x \*.git\*
— ZSH'de

2
Ters eğik çizgi ve tırnak zsh tercih benim alternatif:noglob zip -r out.zip someFolder -x *someExcludedFolder*
— Sébastien

Tar ile nasıl kullanılır? Tar komutuyla çalışmıyor.
— RN Kushwaha

123

Git'te depolanan bir projeyi sıkıştırmaya çalışıyorsanız, git archivekomutu kullanın. Kaynak dizinin içinden:

git archive -o bitvolution.zip HEAD

HEADProjeyi belirli bir noktada arşivlemek yerine herhangi bir taahhüt veya etiket kimliğini kullanabilirsiniz .

Her dosyaya bir önek (örneğin, üst seviye bir klasör) eklemek istiyorsanız:

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

Ayrıca sıkıştırma seviyesini 0 (sıkıştırma yok) ve 9 (maksimum sıkıştırma) dahil arasında ayarlayabilirsiniz, örneğin

git archive -o bitvolution.zip -9 HEAD

Diğer seçenekler için yardım sayfasına bakın ( git help archive).


25
Bu sadece git klasörünü içermeyecek, aynı zamanda gitignore dosyasındaki herhangi bir şey de dışlanacaktır. Efendim, bir oy hakkınız olsun.
— JoeMoe1984

1
Sadece yapmak istediğim şeydi!
— Bjarte

Partiye geç kaldım ama bu kesinlikle beni mahvetti. Mükemmel cevap!
— Tom,

neden bu en iyi cevap değil merak ediyorum
— nabtron

benim için bu bugün en büyük TIL oldu ...
— Shawn Cicoria

27

Ters eğik çizgi ekledim:

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

backslash hakkında man sayfası:

Ters eğik çizgi, kabuk dosya adı değişimini önler, böylece ad eşleştirmesi tüm dizin düzeylerinde zip ile gerçekleştirilir.


dizinleri dışlamak için Ubuntu 14.04'te benim için eğik çizgi çatalları olan yıldızları hazırlamak
— Dimitry K

6

Bunu yaptığınız makineye gitmiş olduğunu varsayarsak, arşivinizi oluşturmak için git'in kendisini de kullanabilirsiniz.

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

2

Eğer zsh kullanıyorsanız, komut şöyle görünmelidir:

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

Eğer kullanın: zip -r target_name.zip source_dir -x /*.git/*. 'regex' olmadan, zsh zip run işleminden önce işlenir. Hata mesajı alacaksınız:

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

Teşekkürler! Windows'ta Ubuntu'da Bash kullanarak benim için çalıştı.
— Adriano Monecchi,

Bu kalıbın nasıl çalıştığını anlamadım ama benim için zsh'de çalıştı.
— Şubat’a
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.