Git क्लोन - मिरर और git क्लोन --bare में क्या अंतर है


486

Git क्लोन हेल्प पेज के बारे में यह कहना है --mirror:

दूरस्थ रिपॉजिटरी का दर्पण सेट करें। इसका तात्पर्य है --bare

लेकिन इस बारे में विस्तार से नहीं बताया गया है कि --mirrorक्लोन क्लोन से कैसे भिन्न है --bare


3
मददगार, लेकिन अगर आप भी इस दर्पण को गीथब की तरह रिमोट रेपो में धकेलना चाहते हैं, तो मुझे यह लिंक हाथ लगा।
Joes

जवाबों:


568

अंतर यह है कि जब उपयोग किया जाता है --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सभी रेफ को चलाते हैं तो यह मूल से अधिलेखित हो जाएगा, जैसे कि आपने अभी दर्पण को हटा दिया है और इसे पुनः प्राप्त करें। जैसा कि डॉक्स ने मूल रूप से कहा था, यह एक दर्पण है। यह एक कार्यात्मक समान प्रतिलिपि माना जाता है, मूल के साथ विनिमेय।


क्या "सामान्य क्लोन" - क्लोन या -मिरर झंडे के बिना एक क्लोन को संदर्भित करता है?
सैम

1
हाँ, यह करता है। एक नंगे क्लोन के साथ, जैसा कि वह मैन पेज पर कहता है, शाखाओं को सीधे कॉपी किया जाता है (कोई भी रीफ़्स / रिमॉसेस / मूल, कोई ट्रैकिंग नहीं)। में संपादित।
Cascabel

क्या आप अंतर के बारे में कुछ और उपयोग उदाहरण जोड़ सकते हैं, न कि केवल गिट-आंतरिक अंतर?
cmcginty

@ कैसी है कि तुम क्या देख रहे थे? मुझे नहीं लगता था कि मैंने जो लिखा था, वह सभी में "आंतरिक" था - टैग और शाखाएं बहुत अधिक चीनी मिट्टी की चीज़ें हैं।
कैस्केबेल

क्या "शाखाओं की नकल की जाती है" का अर्थ है कि शाखाओं को क्लोन पर समान रिश्तेदार पथ पर कॉपी किया जाता है? या इसका मतलब यह है कि शाखाएं किसी तरह से बदल जाती हैं?
सैम

56
$ git clone --mirror $URL

के लिए एक छोटा हाथ है

$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)

( यहां से सीधे कॉपी किया गया )

वर्तमान मैन-पेज इसे कैसे प्रस्तुत करता है:

की तुलना में --bare, --mirrorन केवल लक्ष्य की स्थानीय शाखाओं के लिए स्रोत की स्थानीय शाखाओं को मैप करता है, यह सभी रेफरी (दूरस्थ शाखाओं, नोट्स आदि सहित) को मैप करता है और एक refspec कॉन्फ़िगरेशन सेट करता है, जैसे कि इन सभी रेफरी को git remote updateलक्ष्य रिपॉजिटरी में एक द्वारा ओवरराइट किया गया है । ।


4
मेरा मानना ​​है कि git fetchइसके लिए आपको वास्तव में समान होना चाहिए। वैसे भी, यह एक गैर-उत्तर की तरह है - सवाल का मुद्दा यह है कि "दर्पण रिमोट / क्लोन एक सामान्य से अलग कैसे है?"
कास्केबेल

6
मुझे वास्तव में अंतर प्रदर्शित करने का यह तरीका पसंद है। उम्मीद है कि यह सही है! मुझे आशा है कि hfs लाने से कमांड आती है।
जॉयवेटलड

वास्तव में स्पष्ट नहीं है, जैसे कि क्या है (बेसन $ URL) में अनुवाद करना, आदि
Kzqai

5
basenameसामान्य यूनिक्स उपयोगिता है जो एक पथ के निर्देशिका भाग को स्ट्रिप्स करती है, और $()बस बैश का कमांड प्रतिस्थापन है।
विक्टर ज़मानियन

6
यह अभी भी इसमें --mirrorहै। यह केवल एक स्वीकार्य उत्तर होगा यदि यह समझाया जाए कि क्या git remote add --mirrorकरता है।
ज़ेनेक्सर

24

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

14

डुप्लिकेटिंग रिपॉजिटरी पर GitHub प्रलेखन से एक बारीक व्याख्या :

एक नंगे क्लोन के साथ, एक प्रतिबिंबित क्लोन में सभी दूरस्थ शाखाएं और टैग शामिल हैं, लेकिन सभी स्थानीय संदर्भों को हर बार जब आप लाएंगे, तब इसे अधिलेखित कर दिया जाएगा, इसलिए यह हमेशा मूल रिपॉजिटरी के समान होगा।


1
धन्यवाद; इसने मेरे लिए स्पष्ट किया कि स्थानीय टैग एक दर्पण वाले क्लोन का उपयोग करके शाखाओं के साथ-साथ शाखाओं को भी अधिलेखित कर दिया जाएगा। बहुत मददगार।
वाइल्डकार्ड

2
जब आप --pruneरिमोट पर नहीं होते हैं, तो स्थानीय संदर्भों को हटाने के लिए git लाने के लिए उपयोग करना चाहते हैं।
निशांथ्स

13

एक क्लोन रिमोट से रेफरी को कॉपी करता है और उन्हें 'इन रिफ कि रिमोट हैं' नामक एक उपनिर्देशिका में भर देता है।

एक दर्पण रिमोट से रेफरी को कॉपी करता है और उन्हें अपने शीर्ष स्तर पर रखता है - यह रिमोट के उन लोगों के साथ अपने स्वयं के रिफ को बदल देता है।

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


12

मैं एक तस्वीर जोड़ता हूं, configदर्पण और नंगे के बीच अंतर दिखाता हूं । यहाँ छवि विवरण दर्ज करें बाएं नंगे हैं, दाएं दर्पण है। आप स्पष्ट हो सकते हैं, दर्पण की कॉन्फ़िगरेशन फ़ाइल में fetchकुंजी है, जिसका अर्थ है कि आप इसे अपडेट कर सकते हैं, द्वारा git remote updateयाgit fetch --all


3
$ git clone --bare https://github.com/example

यह कमांड नए को $ GIT_DIR बना देगा। रिमोट पर शाखा प्रमुखों को बिना मैपिंग के सीधे स्थानीय शाखा प्रमुखों को कॉपी किया जाता है। जब इस विकल्प का उपयोग किया जाता है, तो न तो रिमोट-ट्रैकिंग शाखाएं और न ही संबंधित कॉन्फ़िगरेशन चर बनाए जाते हैं।

$ git clone --mirror https://github.com/example

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

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