मैं एक फ़ोल्डर को कैसे ज़िप करूं लेकिन .गित सबफ़ोल्डर को बाहर कर दूं


194

मैं एक फ़ोल्डर से एक ज़िप फ़ाइल बनाने की कोशिश कर रहा हूँ और मैं .gitपरिणामी ज़िप फ़ाइल से उप-फ़ोल्डर को बाहर करना चाहूंगा ।

मैं उस व्यक्ति के मूल फ़ोल्डर में गया हूं जिसे मैं ज़िप करना चाहता हूं ( जिसे बिटवोल्यूशन कहा जाता है ) और मैं कर रहा हूं:

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

लेकिन यह .gitउप-फ़ोल्डर को बाहर नहीं करता है ।

मैं विभिन्न संयोजनों की कोशिश की है, , -x .git*, -x \.git/*, ।-x .git/\* -x \.git/\*मैं भी बाहर तर्क के लिए पूर्ण पथ का उपयोग करने की कोशिश की है ... लेकिन अभी वहाँ नहीं मिला।

जवाबों:


232

सही अभिव्यक्ति है -x *.git*, इसलिए पूर्ण कमांड होनी चाहिए:

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

Http://selfsolved.com/problems/zip-command-exclude-svn-director से स्पष्टीकरण :

सही झुकाव है

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

आप
--exclude=*.DS_Store*कष्टप्रद मैक ओएस एक्स निर्देशिका प्रदर्शन मेटाडेटा फ़ाइलों को बाहर करने के लिए एक भी जोड़ सकते हैं ।

ध्यान दें कि जो अभिव्यक्ति उत्तीर्ण हुई है --exclude, वह मूल स्ट्रिंग के रूप में पूरे मूल सापेक्ष निर्देशिका पथ का उपयोग कर रही है। तो .svn/*अपने आप से काम नहीं करता है; वाइल्डकार्ड वर्ण सामने यह सुनिश्चित करता है कि यह .svnनिर्देशिका ट्री में कहीं भी निर्देशिकाओं से मेल खाता है ।


20
मुझे उद्धरण में ग्लोब को लपेटना था या बैकस्लैश के साथ तारांकन से बचना था, जैसे zip --exclude '*.git*' -r directory.zip directoryयाzip --exclude \*.git\* -r directory.zip directory
दिमित्री मिंकोवस्की

6
यदि आप अन्य फ़ाइलों को खोने के बारे में चिंतित हैं, जिन्हें कुछ कहा जाता है। तो भी, आप भी उपयोग कर सकते हैं --exclude /.git*
एरिन कॉल

4
ZSH में मुझे एक बैकस्लैश जोड़ना था:-x \*.git\*
दिमित्रीसंडालोव

2
बैकस्लैश और उद्धरण के लिए मेरा पसंदीदा विकल्प zsh में:noglob zip -r out.zip someFolder -x *someExcludedFolder*
सेबेस्टियन

टार के साथ इसका उपयोग कैसे करें? यह टार कमांड के साथ काम नहीं कर रहा है।
आरएन कुशवाह

123

यदि आप किसी प्रोजेक्ट को जिप करने की कोशिश कर रहे हैं जो Git में संग्रहीत है, तो git archiveकमांड का उपयोग करें । स्रोत निर्देशिका के भीतर से:

git archive -o bitvolution.zip HEAD

आप HEADएक निश्चित बिंदु पर प्रोजेक्ट को संग्रहीत करने के बजाय किसी भी प्रतिबद्ध या टैग आईडी का उपयोग कर सकते हैं ।

यदि आप प्रत्येक फ़ाइल में एक उपसर्ग (जैसे, एक शीर्ष स्तर फ़ोल्डर) जोड़ना चाहते हैं:

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

आप उदाहरण के लिए, 0 (कोई संपीड़न) और 9 (अधिकतम संपीड़न) के बीच संपीड़न स्तर को भी समायोजित कर सकते हैं

git archive -o bitvolution.zip -9 HEAD

अन्य विकल्पों के लिए, सहायता पृष्ठ ( git help archive) देखें।


25
इसमें न केवल git फ़ोल्डर शामिल होगा, बल्कि gitignore फ़ाइल में जो कुछ भी है, उसे भी बाहर रखा जाएगा। आप सर उठिए।
जोमोइ

1
बस मैं क्या करना चाह रहा था!
बज़र्ट

मुझे पार्टी में देर हो रही है लेकिन इसने मुझे उड़ा दिया। बहुत बढ़िया जवाब!
टॉम

मुझे आश्चर्य है कि यह सबसे अच्छा जवाब क्यों नहीं है
nabtron

मेरे लिए यह आज की सबसे बड़ी TIL थी ...
Shawn Cicoria

27

मैंने बैकस्लैश जोड़ा:

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

बैकस्लैश के बारे में आदमी पृष्ठ:

बैकस्लैश शेल फ़ाइल नाम प्रतिस्थापन से बचता है, ताकि सभी निर्देशिका स्तरों पर ज़िप द्वारा नाम मिलान किया जाता है।


Ubuntu 14.04 पर मेरे लिए स्लैश कांटे के साथ पूर्ववर्ती तारांकन निर्देशिकाओं को बाहर करने के लिए
दिमित्री के

6

मान लें कि आपने ऐसा करने वाली मशीन पर गिट स्थापित किया है, आप अपने संग्रह को बनाने के लिए खुद भी गिट का उपयोग कर सकते हैं।

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

2

यदि आप zsh का उपयोग कर रहे हैं, तो कमांड इस तरह दिखना चाहिए:

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

यदि आप का उपयोग करें zip -r target_name.zip source_dir -x /*.git/*:। 'regex' के बिना, zip चलाने से पहले zsh प्रक्रिया करेगा। आपको त्रुटि संदेश मिलेगा:

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

धन्यवाद! यही मेरे लिए विंडोज पर उबंटू पर बैश का उपयोग करने के लिए काम करता है।
एड्रियानो मोनेची

मुझे समझ नहीं आया कि यह पैटर्न कैसे काम करता है, लेकिन मेरे लिए zsh में काम किया।
insign
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.