Git क्लोन हेल्प पेज के बारे में यह कहना है --mirror
:
दूरस्थ रिपॉजिटरी का दर्पण सेट करें। इसका तात्पर्य है
--bare
।
लेकिन इस बारे में विस्तार से नहीं बताया गया है कि --mirror
क्लोन क्लोन से कैसे भिन्न है --bare
।
Git क्लोन हेल्प पेज के बारे में यह कहना है --mirror
:
दूरस्थ रिपॉजिटरी का दर्पण सेट करें। इसका तात्पर्य है
--bare
।
लेकिन इस बारे में विस्तार से नहीं बताया गया है कि --mirror
क्लोन क्लोन से कैसे भिन्न है --bare
।
जवाबों:
अंतर यह है कि जब उपयोग किया जाता है --mirror
, तो सभी refs को कॉपी किया जाता है । इसका मतलब है कि सब कुछ: रिमोट-ट्रैकिंग शाखाएं, नोट्स, रेफ / मूल / / (फ़िल्टर-शाखा से बैकअप)। क्लोन किए गए रेपो में यह सब है। यह भी सेट किया गया है ताकि एक रिमोट अपडेट मूल से सब कुछ फिर से प्राप्त कर ले (कॉपी किए गए रिफ्स को ओवरराइट कर)। यह विचार वास्तव में रिपॉजिटरी को मिरर करने के लिए है, कुल कॉपी है, ताकि आप उदाहरण के लिए अपने केंद्रीय रेपो को कई स्थानों पर होस्ट कर सकें, या इसे वापस कर सकें। रेपो को कॉपी करने के बारे में सोचें, और अधिक सुंदर तरीके से छोड़कर।
नया दस्तावेज़ बहुत कुछ कहता है:
--mirror
स्रोत रिपॉजिटरी का एक दर्पण सेट करें। इसका तात्पर्य है
--bare
। की तुलना में--bare
,--mirror
न केवल लक्ष्य की स्थानीय शाखाओं के लिए स्रोत की स्थानीय शाखाओं को मैप करता है, यह सभी रेफरी (दूरस्थ शाखाओं, नोट्स आदि सहित) को मैप करता है और एक refspec कॉन्फ़िगरेशन सेट करता है, जैसे कि इन सभी रेफरी कोgit remote update
लक्ष्य रिपॉजिटरी में एक द्वारा ओवरराइट किया गया है । ।
मेरे मूल उत्तर में भी एक नंगे क्लोन और एक सामान्य (गैर-नंगे) क्लोन के बीच अंतर का उल्लेख किया गया था - गैर-नंगे क्लोन दूरस्थ ट्रैकिंग शाखाएं सेट करता है, केवल के लिए एक स्थानीय शाखा HEAD
बनाता है, जबकि नंगे क्लोन सीधे शाखाओं को कॉपी करता है।
मान लीजिए मूल में कुछ शाखाओं (है master (HEAD)
, next
, pu
, और maint
), कुछ टैग ( v1
, v2
, v3
), कुछ सुदूर शाखाओं ( devA/master
, devB/master
), और कुछ अन्य refs ( refs/foo/bar
, refs/foo/baz
, नोट्स, stashes, अन्य devs 'नामस्थान, कौन जानता है हो सकता है)।
git clone origin-url
(गैर नंगे): आप टैग की नकल की के सभी मिल जाएगा, एक स्थानीय शाखा master (HEAD)
एक दूरस्थ शाखा पर नज़र रखने origin/master
, और दूरदराज शाखाओं origin/next
, origin/pu
, और origin/maint
। ट्रैकिंग शाखाएँ स्थापित की जाती हैं ताकि यदि आप कुछ ऐसा करते हैं git fetch origin
, तो वे आपकी अपेक्षा के अनुरूप हो जाएंगे। किसी भी दूरस्थ शाखाओं (क्लोन किए गए रिमोट में) और अन्य रिफ को पूरी तरह से नजरअंदाज कर दिया जाता है।
git clone --bare origin-url
: आप की नकल की टैग, स्थानीय शाखाओं के सभी मिल जाएगा master (HEAD)
, next
, pu
, और maint
, कोई रिमोट ट्रैकिंग शाखाओं। यही है, सभी शाखाओं की नकल की जाती है, और यह पूरी तरह से स्वतंत्र है, फिर से लाने की कोई उम्मीद नहीं है। किसी भी दूरस्थ शाखाओं (क्लोन किए गए रिमोट में) और अन्य रिफ को पूरी तरह से नजरअंदाज कर दिया जाता है।
git clone --mirror origin-url
: उन सभी रिफल्स में से हर एक को इस तरह कॉपी किया जाएगा। आप सभी टैग, स्थानीय शाखाओं मिलेगा master (HEAD)
, next
, pu
, और maint
, दूरस्थ शाखाओं devA/master
और devB/master
अन्य refs refs/foo/bar
और refs/foo/baz
। सब कुछ वैसा ही है जैसा कि क्लोन किए गए रिमोट में था। रिमोट ट्रैकिंग की स्थापना इस प्रकार की जाती है कि यदि आप git remote update
सभी रेफ को चलाते हैं तो यह मूल से अधिलेखित हो जाएगा, जैसे कि आपने अभी दर्पण को हटा दिया है और इसे पुनः प्राप्त करें। जैसा कि डॉक्स ने मूल रूप से कहा था, यह एक दर्पण है। यह एक कार्यात्मक समान प्रतिलिपि माना जाता है, मूल के साथ विनिमेय।
$ git clone --mirror $URL
के लिए एक छोटा हाथ है
$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)
( यहां से सीधे कॉपी किया गया )
वर्तमान मैन-पेज इसे कैसे प्रस्तुत करता है:
की तुलना में
--bare
,--mirror
न केवल लक्ष्य की स्थानीय शाखाओं के लिए स्रोत की स्थानीय शाखाओं को मैप करता है, यह सभी रेफरी (दूरस्थ शाखाओं, नोट्स आदि सहित) को मैप करता है और एक refspec कॉन्फ़िगरेशन सेट करता है, जैसे कि इन सभी रेफरी कोgit remote update
लक्ष्य रिपॉजिटरी में एक द्वारा ओवरराइट किया गया है । ।
git fetch
इसके लिए आपको वास्तव में समान होना चाहिए। वैसे भी, यह एक गैर-उत्तर की तरह है - सवाल का मुद्दा यह है कि "दर्पण रिमोट / क्लोन एक सामान्य से अलग कैसे है?"
basename
सामान्य यूनिक्स उपयोगिता है जो एक पथ के निर्देशिका भाग को स्ट्रिप्स करती है, और $()
बस बैश का कमांड प्रतिस्थापन है।
--mirror
है। यह केवल एक स्वीकार्य उत्तर होगा यदि यह समझाया जाए कि क्या git remote add --mirror
करता है।
Git-2.0.0 के साथ मेरे परीक्षण आज संकेत देते हैं कि --mirror विकल्प हुक, कॉपी फ़ाइल, विवरण फ़ाइल, जानकारी / बहिष्कृत फ़ाइल की प्रतिलिपि नहीं बनाता है, और कम से कम मेरे परीक्षण के मामले में कुछ रेफरी (जो मैं डॉन नहीं करता) टी समझ।) मैं इसे "कार्यात्मक रूप से समान प्रतिलिपि नहीं कहूंगा, मूल के साथ विनिमेय।"
-bash-3.2$ git --version
git version 2.0.0
-bash-3.2$ git clone --mirror /git/hooks
Cloning into bare repository 'hooks.git'...
done.
-bash-3.2$ diff --brief -r /git/hooks.git hooks.git
Files /git/hooks.git/config and hooks.git/config differ
Files /git/hooks.git/description and hooks.git/description differ
...
Only in hooks.git/hooks: applypatch-msg.sample
...
Only in /git/hooks.git/hooks: post-receive
...
Files /git/hooks.git/info/exclude and hooks.git/info/exclude differ
...
Files /git/hooks.git/packed-refs and hooks.git/packed-refs differ
Only in /git/hooks.git/refs/heads: fake_branch
Only in /git/hooks.git/refs/heads: master
Only in /git/hooks.git/refs: meta
डुप्लिकेटिंग रिपॉजिटरी पर GitHub प्रलेखन से एक बारीक व्याख्या :
एक नंगे क्लोन के साथ, एक प्रतिबिंबित क्लोन में सभी दूरस्थ शाखाएं और टैग शामिल हैं, लेकिन सभी स्थानीय संदर्भों को हर बार जब आप लाएंगे, तब इसे अधिलेखित कर दिया जाएगा, इसलिए यह हमेशा मूल रिपॉजिटरी के समान होगा।
--prune
रिमोट पर नहीं होते हैं, तो स्थानीय संदर्भों को हटाने के लिए git लाने के लिए उपयोग करना चाहते हैं।
एक क्लोन रिमोट से रेफरी को कॉपी करता है और उन्हें 'इन रिफ कि रिमोट हैं' नामक एक उपनिर्देशिका में भर देता है।
एक दर्पण रिमोट से रेफरी को कॉपी करता है और उन्हें अपने शीर्ष स्तर पर रखता है - यह रिमोट के उन लोगों के साथ अपने स्वयं के रिफ को बदल देता है।
इसका मतलब यह है कि जब कोई आपके दर्पण से खींचता है और दर्पण के रेफ को आपके उपनिर्देशिका में भर देता है, तो उन्हें वही रिफल्स मिलेंगे जो मूल पर थे। अप-टू-डेट दर्पण से प्राप्त करने का परिणाम प्रारंभिक रेपो से सीधे प्राप्त करने के समान है।
$ git clone --bare https://github.com/example
यह कमांड नए को $ GIT_DIR बना देगा। रिमोट पर शाखा प्रमुखों को बिना मैपिंग के सीधे स्थानीय शाखा प्रमुखों को कॉपी किया जाता है। जब इस विकल्प का उपयोग किया जाता है, तो न तो रिमोट-ट्रैकिंग शाखाएं और न ही संबंधित कॉन्फ़िगरेशन चर बनाए जाते हैं।
$ git clone --mirror https://github.com/example
जैसा कि एक नंगे क्लोन के साथ, एक प्रतिबिंबित क्लोन में सभी दूरस्थ शाखाएं और टैग शामिल हैं, लेकिन सभी स्थानीय संदर्भ (रिमोट-ट्रैकिंग शाखाएं, नोट्स आदि सहित) जब भी आप लाएंगे, तब इसे ओवरराइट किया जाएगा, इसलिए यह हमेशा मूल रिपॉजिटरी के समान होगा। ।