क्या यह सुरक्षित है - dep 1 के साथ क्लोन, कमिट बनाएं और अपडेट को फिर से खींचें?


280

में --depth 1विकल्प git clone:

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

लेकिन मैंने सफलतापूर्वक एक उथला क्लोन किया है, कुछ बदलाव किए हैं और उन परिवर्तनों को वापस (नंगे क्लोन) मूल पर धकेल दिया है।

यह मेरे लिए समझ में आता है - मेरा मतलब है कि क्यों नहीं? जब क्लोन HEAD मूल में पहचाने जाने योग्य है, और मेरी प्रतिबद्धता इसके ऊपर आती है, तो कोई कारण नहीं लगता है। लेकिन मैनुअल अन्यथा कहता है।

मुझे उथले क्लोन का विचार पसंद है - जैसे ड्रूपल कोर: कोई तरीका नहीं है मुझे यह जानने की ज़रूरत है कि ड्रुपल 4 में क्या हुआ जब मैंने 7. से शुरू किया है - लेकिन मैं खुद को पैर में गोली नहीं मारना चाहता।

तो क्या यह उथले क्लोन के लिए सुरक्षित है, इसमें कॉमेट्स विकसित करें, मूल से अपडेट रखने के लिए फिर से खींच लें?


13
यहाँ क्लोन गहराई पर एक सभ्य चर्चा की गई
एंडी

हां, मैं इसे भी पढ़ूंगा, धन्यवाद एंडी। --orphanअवधारणा समान लगता है और मैं एक नाटक है करना चाहते हैं। फिर भी थोड़ा अनावश्यक है कि डॉक्स वास्तविकता से मेल नहीं खाते [क्योंकि जो डॉक्स --orphanको सही कहते हैं?]
आर्टफ्लोबोट

एक काटे गए इतिहास के साथ काम करने की एक और महान चर्चा मिली । लेकिन यह मेरी मदद नहीं करता है।
Artfulrobot

1
Git 1.9 (Q1 2014) पूरी तरह से उथले रेपो क्लोनिंग का समर्थन करेगा! देखें नीचे मेरा उत्तर
VonC

1
Git 2.5 (Q2 2015) एक सिंगल कमिट का समर्थन करता है! मैंने अपना उत्तर संपादित किया है, " एक दूरस्थ गिट रिपॉजिटरी से एक विशिष्ट प्रतिबद्धता खींचो " का संदर्भ दिया ।
वॉन

जवाबों:


304

ध्यान दें कि Git 1.9 / 2.0 (Q1 2014) ने उस सीमा को हटा दिया है। Nguy Thn Thái Ng Dc Duy ( ) से प्रतिबद्ध 82fba2b
देखें :pclouds

अब जो git डेटा ट्रांसफर या उथले क्लोन का समर्थन करता है, ये सीमाएँ अब सच नहीं हैं।

प्रलेखन अब पढ़ता है :

--depth <depth>::

एक 'उथले' क्लोन का निर्माण करें जिसमें इतिहास को निर्दिष्ट संख्याओं में विभाजित किया गया हो।

यह 0d7d285 , f2c681c , और c29a7b8 जैसे कमेंट्स से उपजा है जो कि उथले क्लोनों के साथ क्लोन, सेंड-पैक / प्राप्त-पैक का समर्थन करते हैं।
स्मार्ट-http अब उथले भ्रूण / क्लोन का भी समर्थन करता है

सभी विवरण " shallow.c: के लिए नए कदमों का चयन करने के लिए 8 कदम.git/shallow " में हैं।

अपडेट जून २०१५: जीआईटी २.५ भी एक ही वचन देने की अनुमति देगा !
(अंतिम उथला मामला)


अद्यतन जनवरी 2016: Git 2.8 (मच 2016) अब आधिकारिक तौर पर एक न्यूनतम इतिहास प्राप्त करने की प्रथा है।
देखें 99487cf प्रतिबद्ध , 9cfde9e प्रतिबद्ध (30 दिसंबर 2015), 9cfde9e प्रतिबद्ध (30 दिसंबर 2015), bac5874 प्रतिबद्ध (29 दिसंबर 2015), और 1de2e44 प्रतिबद्ध द्वारा (28 दिसंबर 2015) ( ``) स्टीफन पी स्मिथ
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 7e3e80a , 20 जनवरी 2016)

यह " Documentation/user-manual.txt" है

A स्विच <<def_shallow_clone,shallow clone>>को निर्दिष्ट करके बनाया गया है git-clone --depth
गहराई को बाद में git-fetch --depthस्विच के साथ बदला जा सकता है , या पूर्ण इतिहास के साथ बहाल किया जा सकता है --unshallow

<<def_shallow_clone,shallow clone>>विल के अंदर विलय तब तक काम करेगा जब तक हाल के इतिहास में मर्ज बेस नहीं होगा।
अन्यथा, यह असंबंधित इतिहास को विलय करने जैसा होगा और इसके परिणामस्वरूप भारी संघर्ष हो सकता है।
यह सीमा मर्ज आधारित वर्कफ़्लोज़ में उपयोग किए जाने वाले ऐसे भंडार को अनुपयुक्त बना सकती है।

अद्यतन 2020:

  • git 2.11.1 git fetch --shallow-exclude=सभी इतिहास लाने से रोकने के लिए विकल्प प्रस्तुत किया
  • git fetch --shallow-since=पुराना कमिट लाने के लिए git 2.11.1 पेश किया गया ।

उथले क्लोन अपडेट प्रक्रिया के बारे में अधिक जानकारी के लिए, " एक गिट उथले क्लोन कैसे अपडेट करें? " देखें।


रिचर्ड माइकल द्वारा टिप्पणी के रूप में :

इतिहास को पीछे हटाना: git pull --unshallow

और ओलले हर्स्टेडट टिप्पणी में कहते हैं :

इतिहास के हिस्से को बैकफिल करने के लिए git fetch --depth=100:।


3
इतना पाठ सिर्फ " हाँ , जब तक आपका git संस्करण 4+ साल पुराना नहीं है और मर्ज का आधार हाल के इतिहास में है"
Boris

3
@ इस जवाब से मुझे बहुत मदद मिली क्योंकि मुझे उथले क्लोन का उपयोग करने पर संदेह था। पहले यह कभी-कभी टूटता है जब मैं कमिट कर रहा हूं और मर्ज कर रहा हूं। यह उत्तर एक संक्षिप्त इतिहास है, क्यों यह अब काम करता है जब ऐसा होता है, और इसे ठीक से कैसे करना है।
याना अगुन सिसवांतो

6

मेरे समान प्रश्न के कुछ उत्तर क्यों देखें, कैंट-आई-पुश-ए- एंड -उथले-क्लोन और जीआईटी सूची पर हाल के थ्रेड का लिंक।

अंततः, 'गहराई' माप रेपो के बीच संगत नहीं है, क्योंकि वे अपने व्यक्तिगत HEADs से मापते हैं, बजाय (ए) आपके हेड, या (बी) प्रतिबद्ध (ओं) के द्वारा आपको क्लोन / लाया गया, या (सी) कुछ और आपके मन में था।

हार्ड बिट को एक का यूज़ केस सही (यानी सेल्फ-सुसंगत) मिल रहा है, ताकि वितरित किया जाए, और इसलिए शायद डायवर्जेंट रिपोज अब भी खुशी से एक साथ काम करेंगे।

ऐसा लगता checkout --orphanहै कि सही 'सेट-अप' चरण है, लेकिन अभी भी "क्लोन" कदम पर स्वच्छ (यानी एक साधारण समझने योग्य एक पंक्ति कमांड) मार्गदर्शन का अभाव है। इसके बजाय ऐसा लगता है कि आपके पास initएक रेपो है, एक remoteट्रैकिंग शाखा स्थापित करें (आप केवल एक शाखा चाहते हैं?), और फिर fetchवह एकल शाखा, जो गलतियों के लिए अधिक अवसर के साथ लंबे समय तक घुमावदार महसूस करती है।

संपादित करें: 'क्लोन' चरण के लिए यह उत्तर देखें


1
टैंक फिलिप। एक दूरस्थ शाखा लाना अभी भी पूरे इतिहास (AFAIK) में खींच जाएगा। आप सापेक्ष गहराईयों के बारे में सही हैं, वास्तव में मैं इतिहास में कुछ उपयुक्त बिंदु चाहता हूं (जैसे मेरे मामले में git मर्ज-बेस 7.x 7.0)
artfulrobot

@artfulrobot: '- बोरफान' पद्धति आपको एक छोटा संकीर्ण 'क्लोन' (यानी एक फोकस्ड सेगमेंट) बनाने की अनुमति देती है और फिर इसका उपयोग ऐसे करती है जैसे यह एक उचित रेपो था। यह कुछ ऐसा है जिसे मैंने अभी तक क्रोध में लेने की कोशिश नहीं की है लेकिन यह कुछ ऐसा है जिसे मुझे जल्द ही साबित करना होगा।
फिलिप ओकले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.