साइटों की तरह GitHub और GitLab तरीके प्रदान करने के लिए मर्ज शाखाओं में सीधे अपने वेब अंतरफलक में. दिया है कि उन साइटों स्टोर केवल नंगे रेपो, कैसे वे प्रदर्शन करते हैं उन विलीन हो जाती है? कर सकते हैं एक ही बात किया जा सकता है पर कमांड लाइन में एक नंगे क्लोन? मैंने पाया यह एक संभव के रूप में जवाब का उपयोग पाइपलाइन हासिल है.
क्योंकि GitHub बंद कर दिया है, स्रोत है, हम नहीं कर सकते हैं कहने के लिए यकीन है कि वास्तव में कैसे अपने बैकएंड संभालती विलय के संचालन । हालांकि, GitLab है खुला स्रोत है और हम में झांकना कर सकते हैं कार्यान्वयन के विवरण, जो समय के साथ बदल गया.
कैसे GitLab करता है यह
आज, सबसे git से संबंधित कर रहे हैं कि सुविधाओं में सामने यूआई सहित git विलीन हो जाती है पर GitLab द्वारा नियंत्रित कर रहे हैं gitaly घटक के GitLab, जो सूचना का आदान प्रदान के साथ भौतिक भंडारण के लिए git रिपॉजिटरी. यह मुख्य रूप से इसके उपयोग करता है पर निर्भर पुस्तकालय, git2go, प्रदर्शन के लिए वास्तविक git के संचालन ।
करीब देख रहे हैं के लिए स्रोत कोड पर gitaly
, सबसे अच्छा मूल्यांकन कर सकता है कि gitaly वास्तव में करता है, का व्यापक उपयोग कर काम करने के लिए पेड़ git संचालन सहित, के लिए विलीन हो जाती है । खजाने और काम के पेड़, आम तौर पर खोला और क्लोन करने के लिए "संगरोध" निर्देशिका में कर रहे हैं, जो सिर्फ अस्थायी निर्देशिका में बनाया पर उड़ान भरने के लिए और भंडार के काम के पेड़ क्लोन में अस्थायी निर्देशिका. (देखें संगरोध.जाने#L40-58कहा जाता है, से विलय । जाने#L53).
कैसे वे प्रदर्शन करते हैं उन विलीन हो जाती है?
तो, आपके सवाल का जवाब: कम से कम के साथ GitLab काम कर रहा है, पेड़ हैं, के लिए इस्तेमाल किया विलीन हो जाती है (बीच अन्य संचालन) और नहीं कर रहे हैं बाहर किया में नंगे खजाने. तुम सिर्फ उन्हें देख नहीं है क्योंकि अस्थायी निर्देशिका में इस्तेमाल कर रहे हैं इससे पहले कि वे करने के लिए प्रतिबद्ध हैं वास्तविक भंडार पथ.
हम कर सकते हैं शायद लगता है कि GitHub कुछ इसी तरह करता है, लेकिन यह असंभव है करने के लिए सुनिश्चित करने के लिए पता.
यह किया जा सकता है?
कर सकते हैं एक ही बात किया जा सकता है पर कमांड लाइन में एक नंगे क्लोन?
आप की ओर इशारा करने के लिए एक उदाहरण है कि लगता है काम करने के लिए जाँच के बिना बाहर काम कर रहे एक पेड़ है? लेकिन यह काम करता है लेखन के द्वारा (पेड़ का उपयोग कर git write-tree
), जो एक व्यावहारिक स्तर पर नहीं लगता है करने के लिए किसी भी लाभ पर कहते हैं, क्लोनिंग से नंगे रेपो और बाहर की जाँच के काम के पेड़ और का उपयोग कर git
संचालन सामान्य रूप से । प्रदर्शन के लिए (की आशंका संभव आपत्ति) का उपयोग कर सकते हैं tempfs या कुछ अन्य स्मृति-मैप किए गए स्थान.
मैं भी अनिश्चित है कि लिंक के जवाब देने के लिए पर्याप्त होगा के लिए बाहर ले जाने के विभिन्न विलय द्वारा इस्तेमाल किया रणनीति git merge
.
तो, एक परिभाषा, हो सकता है? जवाब है कि आप लिंक करने के लिए लगता है कि सवाल का जवाब अच्छी तरह से. एक व्यावहारिक स्तर पर उपयोगी होगा कि, नहीं, यह नहीं लगता है इतना.
relativePath
इस मामले में अस्थायी निर्देशिका में बनाई गई है, जो रिश्तेदार के लिए रेपो डिस्क पर. यह की तरह लग रहा है यह क्लोनिंग रेपो है, तो अधिभावी उद्देश्य पथ (quarantinedRepo.GitObjectDirectory = relativePath
में ) quarantineRepo
वस्तु को इंगित करने के लिए tempdir (विरोध के रूप में करने के लिए क्या मैं यह मान डिफ़ॉल्ट के वास्तविक रेपो की वस्तुओं के स्थान से लौटे क्लोन विधि).
git clone --shared
.