Pertanyaan Bagaimana cara meringkas folder tetapi mengecualikan subfolder .git


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

Saya telah pergi ke folder induk dari yang saya ingin zip (disebut bitvolution) dan saya sedang melakukan:

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

Tapi itu tidak mengecualikan .git sub-folder.

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


149
2018-02-28 20:38


asal




Jawaban:


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

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 diteruskan ke --exclude menggunakan seluruh jalur direktori relatif asli sebagai string asli untuk dicocokkan. Begitu .svn/* dengan sendirinya tidak berfungsi; karakter wildcard di depan memastikan cocok .svn direktori di mana saja di pohon direktori.


182
2018-02-28 21:01



Saya harus membungkus gumpalan dalam tanda kutip atau melarikan diri dari tanda bintang dengan garis miring terbalik, seperti zip --exclude '*.git*' -r directory.zip directory atau zip --exclude \*.git\* -r directory.zip directory - Dmitry Minkovsky
Jika Anda khawatir kehilangan file-file lain yang disebut something.gitwhatever, Anda juga bisa menggunakannya --exclude /.git*. - Erin Call
di ZSH saya harus menambahkan backslash: -x \*.git\* - DmitrySandalov
Alternatif pilihan saya untuk backslashes dan tanda kutip di zsh: noglob zip -r out.zip someFolder -x *someExcludedFolder* - Sébastien
Bagaimana cara menggunakannya dengan tar? Itu tidak bekerja dengan perintah tar. - RN Kushwaha


Jika Anda mencoba membuat zip proyek yang disimpan di Git, gunakan git archive perintah. Dari dalam direktori sumber:

git archive -o bitvolution.zip HEAD

Anda dapat menggunakan sembarang komit atau ID tag sebagai ganti HEAD untuk mengarsipkan proyek pada titik tertentu.

Jika Anda ingin menambahkan awalan (mis., Folder tingkat atas) ke setiap file:

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

Anda juga dapat mengatur tingkat 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).


84
2017-12-14 11:08



Tidak hanya ini tidak termasuk folder git tetapi juga apa pun yang ada dalam file gitignore akan dikecualikan juga. Anda tuan mendapatkan upvote. - JoeMoe1984
Hanya apa yang ingin saya lakukan! - Bjarte
Saya terlambat ke pesta tapi ini benar-benar membuat saya terpesona. Jawaban bagus! - Tom
Saya bertanya-tanya mengapa bukan ini jawaban terbaik - nabtron
bagi saya ini adalah hari terbesar hari ini ... - Shawn Cicoria - MSFT


Saya menambahkan backslash:

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

halaman manual tentang backslash:

Backslash menghindari substitusi filename shell, sehingga namanya   pencocokan dilakukan dengan zip di semua level direktori.


21
2017-12-14 10:13



tanda bintang tambahan dengan garpu garis miring untuk saya di Ubuntu 14.04 untuk mengecualikan direktori - Dimitry K


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

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

5
2017-12-14 11:12





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 zip dijalankan. Anda akan mendapatkan pesan kesalahan:

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

1
2018-06-08 09:35



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