Git से एकल संशोधन प्राप्त करना


14

पूर्ण Git संशोधन इतिहास होने से विकास प्रक्रिया के हिस्से के रूप में बहुत सारे लाभ हैं।

लेकिन हमारा उत्पाद स्रोत कोड है, हम स्क्रिप्टेड भाषाओं का उपयोग कर रहे हैं जिन्हें संकलन या प्रसंस्करण की आवश्यकता नहीं है, और फिर गिट इतिहास तैनाती पर बोझ बन जाता है- हमारे उदाहरण में हम हर बदलाव के बाद एक स्वच्छ आभासी वातावरण तैनात करते हैं, जिस पर कई तैनाती होती हैं एक मशीन।

इतिहास की मात्रा को कम करने के कुछ तरीके हैं, उदाहरण के लिए उथले क्लोन जिनकी दक्षता इस बात पर निर्भर करती है कि शाखा में संशोधन कितना गहरा है, क्लोन के बजाय एक भ्रूण कर रहे हैं लेकिन फिर भी आपको संशोधन और पीछे से इतिहास मिलता है, या पूर्ण प्राप्त होता है रेपो एक बार फिर जरूरत पड़ने पर खींचता है लेकिन यह डिस्क स्थान के मामले में बेकार है और कम विश्वसनीय है।

क्या यह इतिहास के बिना Git से एक भी संशोधन प्राप्त करने का एक तरीका है?


1
संबंधित क्यू एंड एसओ पर एक stackoverflow.com/questions/26135216/...
एव्जेनी

जवाबों:


16

उथला क्लोन

आप वास्तव में Git का उपयोग करके उथले क्लोन प्राप्त कर सकते हैं:

git clone --depth=1 <url>

यह अभी भी रेपो को क्लोन करेगा और .gitऑब्जेक्ट्स के साथ एक फ़ोल्डर बनाएगा , केवल आकार में छोटा (अंतर आपके कुल फ़ाइल आकार बनाम इतिहास के आकार के आधार पर)।

अभिलेख संग्रह

रेपो के एक संग्रह को निकालने के लिए आप git-आर्काइव का भी उपयोग कर सकते हैं :

नामित पेड़ के लिए पेड़ की संरचना वाले निर्दिष्ट प्रारूप का एक संग्रह बनाता है, और इसे मानक आउटपुट के लिए लिखता है। यदि निर्दिष्ट किया गया है तो यह संग्रह में फ़ाइल नाम के लिए पूर्व निर्धारित है।

में उदाहरण यह उदाहरण के लिए पता चलता है:

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

रिलीज के लिए एक संकुचित टारबॉल बनाएं ।

होस्टेड जीआईटी, आर्काइव एपीआई

यदि आप GitHub पर अपना रेपो होस्ट कर रहे हैं, तो आप उनके आर्काइव API का उपयोग कर सकते हैं :

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org के पास इसके लिए समान कार्यक्षमता है:

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip


7ochem, शायद gzip कमांड को gzip -c होना आवश्यक है ....
रोमियो निनोव

11

अपने git रेपो को तैनात न करें। एक वास्तविक तैनाती पद्धति विकसित करें। यहां तक ​​कि अगर यह संग्रहित लिपियों के संग्रह (= सिर्फ आवश्यक फाइलों के साथ एक विरूपण साक्ष्य के निर्माण के लिए) के रूप में सरल है।

यहां तक ​​कि अगर आप अपने स्रोत रिपॉजिटरी के टिप को उथले-से करते हैं, तो आपको अपने तैनात वातावरण में इकाई परीक्षणों, प्रलेखन, लाइनिंग प्रोफाइल और अन्य सहायक पंचांग की आवश्यकता नहीं है।

नोट : स्क्रिप्टेड भाषाओं की रिपॉजिटरी के लिए, जिनके पास वास्तव में "बिल्ड" कदम नहीं है, एक कलाकृति को जारी करने का एक तुच्छ तरीका उन्हें संग्रह में संग्रहीत करना होगा, जैसे कि टार या आरपीएम। फिर, "परिनियोजित" करने के लिए, आप संग्रह को अनटार करें या आरपीएम स्थापित करें। यह आपकी तैनाती श्रृंखला में गिट टूलींग की आवश्यकता को हटाता है (सभी ठेस सर्वर के पास उन देव उपकरण नहीं होंगे)।


यह सवाल ठीक है (या यहां तक ​​कि चुनौती!) एक उत्तर - यह वही है जो स्टैक एक्सचेंज को महान बनाता है :) स्क्रिप्टेड भाषाओं की रिपॉजिटरी के लिए जो वास्तव में "बिल्ड" चरण नहीं है, एक विरूपण साक्ष्य को जारी करने का एक तुच्छ तरीका पैकेज के लिए होगा उन्हें एक संग्रह में, जैसे टार या आरपीएम। फिर, "परिनियोजित" करने के लिए, आप संग्रह को अनटार करें या आरपीएम स्थापित करें। यह आपकी तैनाती श्रृंखला में git टूलींग की आवश्यकता को हटाता है (सभी ठेस सर्वरों के पास देव उपकरण नहीं होंगे)
RubyTuesdayDONO

1
@ पियरे.वीयरेंस हाँ, आपको याद आ रहा है कि एक आर्काइव को टारगेट करने के रूप में क्या सुझाव दिया गया है, अर्थात् इसमें तैनात करने के लिए केवल आवश्यक फाइलों के साथ एक कलाकृति का निर्माण करना। मैंने कहा कि मैं सहमत हूं कि यह गुणवत्ता का जवाब नहीं है और इस बिंदु को बढ़ाया जाना चाहिए। हम निजी बीटा में हैं और उत्तर स्पष्ट होना चाहिए
तेंसिबाई

फिर मैं यह नहीं देखता कि यह स्वीकार किए गए उत्तर से अधिक क्या लाता है, अगर यह फिट संग्रह की ओर इंगित करने के लिए है ... यह सिर्फ बेमानी है, तो आपको इस तरह से iMHo
Tensibai

1
कृपया अपने उत्तर के मेरे संपादन की जाँच करें (बस अपनी दिलचस्प टिप्पणी एकीकृत)। यदि आप मेरे संपादन को बिल्कुल पसंद नहीं करते हैं, तो निःसंदेह सुधार / सुधार करें, या सिर्फ रोलबैक करें। BTW: आपकी टिप्पणी (= नोट मैंने जोड़ा) ने मुझे "वास्तव में, उस सरल की तरह सोचा? फिर से हम जीओएस में कैसे चीजें हासिल करते हैं ... का एक नमूना ... शून्य डाउनटाइम के लिए जेड के साथ ..."। मैं सवाल तरीका करने के लिए और अधिक प्रश्न / समान टिप्पणियों के माध्यम से जवाब शुरू करने के लिए यह समय लगता है ... क्या मुझे बहुत अधिक चुनौती नहीं ...
Pierre.Vriens

मैं यह नहीं कहता कि यह एक पूर्ण या मॉडल उत्तर है, लेकिन मैंने कमरे में हाथी को संबोधित करते हुए किसी और को नहीं देखा: यदि आप अपनी परियोजना को "तैनात" करने के लिए गिट का उपयोग करते हैं, तो आप "बुरा समय मानेंगे" ;)
RubyTuesdayDONO

6

सवाल यह है कि इतिहास के बिना Git से एक भी संशोधन प्राप्त करने का एक तरीका है?

एक रिपॉजिटरी पाने के लिए, कोई रास्ता नहीं है, मुख्य रूप से क्योंकि कोई 'संशोधन' नहीं है। Git store कमिट करता है, जो पिछले अवस्था से परिवर्तन हैं।
यदि आप एक विशिष्ट बिंदु पर अपनी रिपॉजिटरी चाहते हैं, तो आपको इस समय कमिटमेंट को पूरा करना होगा और यह सब पूर्वजों का है या फिर आपको केवल कमिटमेंट में किए गए बदलाव ही मिलेंगे।

भ्रम से बचने के लिए: उथले क्लोनिंग को आवश्यक इतिहास मिल रहा है और फिर इसे खाली स्थान पर रौंदकर, पेड़ अभी भी इतिहास से बना है।

समाधान के लिए, @ 7ochem उत्तर उन्हें कवर करता है।

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