एक फ़ोल्डर को बिना .it फ़ाइलों के टार करें?


16

अगर मैं एक फ़ोल्डर को टारगेट करता हूं जो एक git रिपॉजिटरी है, तो क्या मैं .gitसंबंधित फाइलों को शामिल किए बिना ऐसा कर सकता हूं ? यदि नहीं, तो मैं एक कमांड के माध्यम से कैसे करूंगा?

जवाबों:


24

पहले देखो git help archive। archiveएक git कमांड है जो केवल git tracked फ़ाइलों वाले अभिलेखागार बनाने की अनुमति देता है। शायद तुम जो खोज रहे हो। मैन पेज के अंत में सूचीबद्ध एक उदाहरण:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

6
यह केवल अभिलेखीय जड़ git रेपो है। यदि सबमॉड्यूल का उपयोग किया गया था - उनकी निर्देशिका खाली हो जाएगी।
— Stann

@ स्टैन: धन्यवाद, एक अन्य सबमॉड्यूल उपयोगकर्ता से
— मार्क के कोवान

22

सरलतम उत्तर: जोड़ें --exclude-vcs। यह सभी संस्करण नियंत्रण प्रणाली निर्देशिकाओं को बाहर करता है

व्यक्तिगत रूप से मैं उपयोग करता हूं

tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME

इसलिए आपको --exclude-vcsकेवल कमांड के अंत में जोड़ने की आवश्यकता है ।


1
सभी ज्ञात , मुझे लगता है? ;)
— phk

3
जीएनयू / लिनक्स पर तर्कों से पहले सभी विकल्पों को एक साथ होना चाहिए।
— जोश हबदास ३०'१ ९ ३:३

2
जैसा कि ग्नू / लिनक्स के लिए कहा गया हैtar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
— माइकल इरे

1
ऐसा लगता है कि OSX कैटालिना का टार उस विकल्प का समर्थन नहीं करता है ...
— फ्रेंक मारजोआ

21

यदि आप चाहते हैं कि संग्रह में git द्वारा ट्रैक की गई फ़ाइलों को शामिल किया जाए, लेकिन खुद git रिपॉजिटरी या कोई जेनरेट की गई या अनट्रैक की गई फ़ाइल नहीं है, तो उपयोग करेंgit archive ।

यदि आप विशेष रूप से बाहर करना चाहते हैं, .gitलेकिन लिनक्स या FreeBSD या OSX या Cygwin के तहत बाकी सब कुछ शामिल करते हैं, तो टार में एक निर्देशिका को बाहर करने का एक सरल विकल्प है:

tar -c --exclude .git -f - foo | gzip >foo.tgz

जीएनयू टार (यानी लिनक्स या सिगविन के तहत) के साथ, आप इसे छोटा कर सकते हैं tar czf foo.tgz --exclude .git foo।

अभिलेखागार बनाने का POSIX तरीका है pax।

pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz

क्या gitकिसी भी सिस्टम पर संकलन tarउपलब्ध नहीं है? :-)
— स्टीफन जिमेनेज़

3
@ StéphaneGimenez शायद नहीं। लेकिन यह उन सिस्टमों पर संकलित करता है जहां tarकोई --excludeविकल्प नहीं है, जैसे कि OpenBSD (जो माना जाता है sकि पैक्स के विकल्प को दोहराता है, लेकिन यह एक सामान्य टार कमांड सिंटैक्स एक्सटेंशन नहीं है)।
— गिल्स एसओ- बुराई को रोकना '

0

एक उत्तर के लिए धन्यवाद मुझे अपने एक प्रश्न पर एक और समाधान सूझा। तो पूर्णता के लिए, यहाँ एक समाधान का उपयोग किया जा रहा है find:

find . -path './.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

और यदि आप संभव .gitफ़ोल्डर को अंदर (उप) + फ़ोल्डर से बाहर करना चाहते हैं :

find . -path '*/.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

लैटर के माध्यम से भी प्राप्त किया जा सकता है:

find . -type d -name '.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

यदि आप findसंशोधन तिथि, अनुमतियाँ,…

(जैसा कि अक्सर अच्छी तरह से बनाई गई फ़ाइल नाम मान लिया जाता है, अन्यथा आपको अलग-अलग के रूप में अशक्त बाइट्स का उपयोग करने की आवश्यकता होती है जो कि समर्थित -print0होने पर findऔर इसके --nullलिए मतलब हो सकता है tar।)

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