Bagaimana cara zip folder tetapi mengecualikan subfolder .git


196

Saya mencoba membuat file zip dari folder dan saya ingin mengecualikan .gitsub-folder dari file zip yang dihasilkan.

Saya telah membuka folder induk yang ingin saya zip ( disebut bitvolution ) dan saya lakukan:

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

Tapi itu tidak mengecualikan .gitsub-folder.

Saya sudah mencoba berbagai kombinasi, -x .git*, -x \.git/*, -x .git/\*, -x \.git/\*. Saya juga mencoba menggunakan path lengkap untuk argumen mengecualikan ... tetapi tidak sampai di sana.

Jawaban:


234

Ekspresi yang benar adalah -x *.git*, jadi perintah lengkapnya adalah:

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

Penjelasan dari http://selfsolved.com/problems/zip-command-exclude-svn-director :

Mantra yang benar adalah

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

Anda juga dapat menambahkan
--exclude=*.DS_Store*untuk mengecualikan file metadata tampilan direktori Mac OS X yang mengganggu.

Perhatikan bahwa ekspresi yang diteruskan --excludemenggunakan seluruh jalur direktori relatif asli sebagai string asli yang cocok dengan. Jadi .svn/*dengan sendirinya tidak bekerja; karakter wildcard di depan memastikan bahwa itu cocok dengan .svndirektori di mana saja di pohon direktori.


20
Saya harus membungkus gumpalan dengan tanda kutip atau melarikan diri dari tanda bintang dengan garis miring terbalik, seperti zip --exclude '*.git*' -r directory.zip directoryatauzip --exclude \*.git\* -r directory.zip directory
Dmitry Minkovsky

6
Jika Anda khawatir kehilangan file lain yang disebut sesuatu. Apa pun, Anda juga dapat menggunakan --exclude /.git*.
Erin Call

4
di ZSH saya harus menambahkan backslash:-x \*.git\*
DmitrySandalov

2
Alternatif pilihan saya untuk garis miring terbalik dan kutipan di zsh:noglob zip -r out.zip someFolder -x *someExcludedFolder*
Sébastien

Bagaimana cara menggunakannya dengan tar? Ini tidak bekerja dengan perintah tar.
RN Kushwaha

124

Jika Anda mencoba untuk meng-zip proyek yang disimpan di Git, gunakan git archiveperintah. Dari dalam direktori sumber:

git archive -o bitvolution.zip HEAD

Anda dapat menggunakan ID komit atau tag daripada HEADmengarsipkan proyek pada titik tertentu.

Jika Anda ingin menambahkan awalan (misalnya, folder tingkat atas) ke setiap file:

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

Anda juga dapat menyesuaikan level kompresi antara 0 (tanpa kompresi) dan 9 (kompresi maksimum) inklusif, misalnya

git archive -o bitvolution.zip -9 HEAD

Untuk opsi lain, lihat halaman bantuan ( git help archive).


25
Ini tidak hanya akan tidak termasuk folder git tetapi juga segala sesuatu yang ada di file gitignore akan dikecualikan juga. Anda mendapatkan suara yang positif.
JoeMoe1984

1
Apa yang ingin saya lakukan!
Bjarte

Saya terlambat ke pesta tetapi ini benar-benar membuat saya terkejut. Jawaban bagus!
Tom

saya bertanya-tanya mengapa ini bukan jawaban terbaik
nabtron

bagi saya ini adalah TIL terhebat hari ini ...
Shawn Cicoria 8'18

27

Saya menambahkan backslash:

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

halaman manual tentang backslash:

Backslash menghindari substitusi nama file shell, sehingga pencocokan nama dilakukan oleh zip di semua level direktori.


mengawali tanda bintang dengan forash slash untuk saya di Ubuntu 14.04 untuk mengecualikan direktori
Dimitry K

6

Dengan asumsi Anda telah menginstal git pada mesin yang Anda lakukan ini, Anda juga dapat menggunakan git sendiri untuk membuat arsip Anda.

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

2

Jika Anda menggunakan zsh, perintah akan terlihat seperti:

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

Jika Anda menggunakan: zip -r target_name.zip source_dir -x /*.git/*. tanpa 'regex', zsh akan memproses sebelum menjalankan zip. Anda akan mendapatkan pesan kesalahan:

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

Terima kasih! Itulah yang berhasil bagi saya menggunakan Bash di Ubuntu di Windows.
Adriano Monecchi

Saya tidak mengerti bagaimana pola ini bekerja, tetapi bekerja untuk saya di zsh.
lambang
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.