git - Mercurial और गिट के बीच क्या अंतर है?




version-control comparison (17)

मैं विंडोज़ (msysGit के साथ) पर कुछ समय के लिए गिट का उपयोग कर रहा हूं और मुझे वितरित स्रोत नियंत्रण का विचार पसंद है। हाल ही में मैं Mercurial (एचजी) देख रहा था और यह दिलचस्प लग रहा है। हालांकि, मैं अपने सिर को एचजी और गिट के बीच मतभेदों के चारों ओर लपेट नहीं सकता।

क्या किसी ने गिट और एचजी के बीच साइड-बाय-साइड तुलना की है? मुझे यह जानने में दिलचस्पी है कि फैनबॉय चर्चा में कूदने के बिना एचजी और गिट क्या भिन्न है।


Bitbucket.org के mercurial और github के गिट के बीच ध्यान देने योग्य एक बात यह है कि, जैसा कि आप चाहें उतने निजी भंडार हो सकते हैं, लेकिन जिथब आपको एक भुगतान खाते में अपग्रेड करना होगा। इसलिए, यही कारण है कि मैं बिटबकेट के लिए जाता हूं जो कि मर्कुरियल का उपयोग करता है।




कुछ भी तो नहीं। वे दोनों समान करते हैं, दोनों समान रूप से प्रदर्शन करते हैं। एकमात्र कारण आपको एक दूसरे को चुनना चाहिए यदि आप किसी ऐसे प्रोजेक्ट में मदद करते हैं जो पहले से ही एक का उपयोग करता है ..

एक चुनने का दूसरा संभावित कारण एक ऐसा एप्लिकेशन या सेवा है जो केवल सिस्टम में से किसी एक का समर्थन करता है .. उदाहरण के लिए, मैंने गिटूब की वजह से गिट सीखना चुना है ..


क्या आपके प्रोजेक्ट पर कोई विंडोज-आधारित सहयोगी है?

क्योंकि यदि वहां हैं, तो गिट-फॉर-विंडोज जीयूआई अजीब, मुश्किल, असभ्य लगता है।

इसके विपरीत, Mercurial-on-Windows, एक ब्रेनर है।


गिट एक मंच है, Mercurial एक आवेदन है "बस"। गिट एक संस्करणित फाइल सिस्टम प्लेटफ़ॉर्म है जो बॉक्स में एक डीवीसीएस ऐप के साथ जहाज के साथ होता है, लेकिन प्लेटफ़ॉर्म ऐप्स के लिए सामान्य के रूप में, यह अधिक जटिल होता है और केंद्रित ऐप्स की तुलना में अधिक कठोर किनारों पर होता है। लेकिन इसका मतलब यह भी है कि गिट का वीसीएस बेहद लचीला है, और गैर-स्रोत-नियंत्रण चीजों की एक बड़ी गहराई है जो आप गिट के साथ कर सकते हैं।

वह अंतर का सार है।

भंडार प्रारूप से गिट को ग्राउंड अप से सबसे अच्छी तरह से समझा जाता है। स्कॉट चकॉन की गिट टॉक इस के लिए एक उत्कृष्ट प्राइमर है। यदि आप हुड के नीचे क्या हो रहा है, यह जानने के बिना गिट का उपयोग करने का प्रयास करते हैं, तो आप किसी बिंदु पर भ्रमित हो जाएंगे (जब तक कि आप केवल मूलभूत कार्यक्षमता तक नहीं रहें)। यह बेवकूफ लग सकता है जब आप चाहते हैं कि आपके दैनिक प्रोग्रामिंग दिनचर्या के लिए एक डीवीसीएस है, लेकिन गिट की प्रतिभा यह है कि रिपोजिटरी प्रारूप वास्तव में बहुत ही सरल है और आप गिट के पूरे ऑपरेशन को आसानी से समझ सकते हैं।

कुछ और तकनीकी-उन्मुख तुलनाओं के लिए, मैंने जो व्यक्तिगत लेख व्यक्तिगत रूप से देखा है, वे डस्टिन सेलिंग्स हैं:

उन्होंने वास्तव में दोनों डीवीसीएस का व्यापक रूप से उपयोग किया है और उन्हें दोनों अच्छी तरह से समझते हैं - और गिट पसंद करते हैं।


पिछले साल मैंने अपने स्वयं के उपयोग के लिए दोनों गिट और एचजी का मूल्यांकन किया, और एचजी के साथ जाने का फैसला किया। मुझे लगा कि यह एक क्लीनर समाधान की तरह लग रहा था, और उस समय और अधिक प्लेटफार्मों पर बेहतर काम करता था। हालांकि, यह ज्यादातर टॉस-अप था।

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


फिर भी Mercurial और गिट की एक और दिलचस्प तुलना: Mercurial बनाम गिट । मुख्य फोकस आंतरिक और शाखाओं की प्रक्रिया पर उनके प्रभाव पर है।



मैं वर्तमान में एसवीएन से एक डीवीसीएस में माइग्रेट करने की प्रक्रिया में हूं (जबकि मेरे निष्कर्षों के बारे में ब्लॉगिंग, मेरा पहला वास्तविक ब्लॉगिंग प्रयास ...), और मैंने थोड़ा सा शोध किया है (= googling)। जहां तक ​​मैं देख सकता हूं कि आप दोनों पैकेजों के साथ अधिकांश चीजें कर सकते हैं। ऐसा लगता है कि गिट में कुछ और बेहतर कार्यान्वित उन्नत सुविधाएं हैं, मुझे लगता है कि खिड़कियों के साथ एकीकरण TortoiseHg के साथ Mercurial के लिए थोड़ा बेहतर है। मुझे पता है कि गिट चीता भी है (मैंने दोनों की कोशिश की), लेकिन मर्कुरियल समाधान बस अधिक मजबूत लगता है।

यह देखते हुए कि वे दोनों ओपन-सोर्स (दाएं?) कैसे हैं, मुझे नहीं लगता कि या तो महत्वपूर्ण विशेषताओं की कमी होगी। अगर कुछ महत्वपूर्ण है, तो लोग इसके लिए पूछेंगे, लोग इसे कोड देंगे।

मुझे लगता है कि सामान्य प्रथाओं के लिए, गिट और मर्कुरियल पर्याप्त से अधिक हैं। दोनों में बड़ी परियोजनाएं होती हैं जो उनका उपयोग करती हैं (गिट -> लिनक्स कर्नेल, मर्कुरियल -> मोज़िला नींव परियोजनाएं, दोनों निश्चित रूप से दोनों के बीच), इसलिए मुझे नहीं लगता कि या तो वास्तव में कुछ कमी है।

ऐसा कहा जा रहा है कि, मुझे इस बारे में अन्य लोगों के बारे में क्या कहना है, इस बारे में मुझे रूचि है, क्योंकि यह मेरे ब्लॉगिंग प्रयासों के लिए एक महान स्रोत बना देगा ;-)


यदि आप एक विंडोज डेवलपर हैं जो मूल डिस्कनेक्ट किए गए संशोधन नियंत्रण की तलाश में हैं, तो एचजी के साथ जाएं। मैंने गिट को समझ में नहीं पाया, जबकि एचजी विंडोज शैल के साथ सरल और अच्छी तरह से एकीकृत था। मैंने एचजी डाउनलोड किया और इस ट्यूटोरियल का पालन ​​किया (hginit.com) - दस मिनट बाद मेरे पास स्थानीय रिपो था और मेरी परियोजना पर काम करने के लिए वापस आ गया।


यदि आप एसवीएन से माइग्रेट कर रहे हैं, तो Mercurial का उपयोग करें क्योंकि इसके वाक्यविन्यास एसवीएन उपयोगकर्ताओं के लिए बहुत अधिक समझदार है। इसके अलावा, आप या तो गलत नहीं जा सकते हैं। लेकिन उनमें से एक का चयन करने से पहले जीआईटी ट्यूटोरियल और एचजीनिट की जांच करें।


ये लेख मदद कर सकते हैं:

संपादित करें : हस्तियों के लिए गिट और मर्कुरियल की तुलना करना एक प्रवृत्ति प्रतीत होता है। यहां एक और है:


विंडोज़ पर बड़ा अंतर है। Mercurial मूल रूप से समर्थित है, गिट नहीं है। आप bitbucket.org के साथ github.com पर बहुत ही समान होस्टिंग प्राप्त कर सकते हैं (वास्तव में बेहतर है क्योंकि आप एक मुफ्त निजी भंडार प्राप्त करते हैं)। मैं थोड़ी देर के लिए msysGit का उपयोग कर रहा था लेकिन Mercurial में चले गए और इसके साथ बहुत खुश थे।


शब्दावली वेबसाइट में शब्दावली और अंतर्निहित अवधारणाओं के अंतर को समझाते हुए, दोनों प्रणालियों के बीच समानताएं और मतभेदों का एक बड़ा विवरण है । एक लंबे समय के गिट उपयोगकर्ता के रूप में, यह वास्तव में मेरी Mercurial मानसिकता को समझने में मदद की।



मैं Mercurial पर काम करता हूं, लेकिन मूल रूप से मेरा मानना ​​है कि दोनों सिस्टम समकक्ष हैं। वे दोनों एक ही सार तत्वों के साथ काम करते हैं: स्नैपशॉट्स (परिवर्तन) की एक श्रृंखला जो इतिहास बनाती है। प्रत्येक परिवर्तनक जानता है कि यह कहां से आया (मूल परिवर्तन) और इसमें कई बच्चे परिवर्तन हो सकते हैं। हाल ही में hg-git एक्सटेंशन मर्कुरियल और गिट के बीच दो तरफा पुल प्रदान करता है और इस बिंदु को दिखाता है।

गिट के पास इस इतिहास ग्राफ (सभी परिणामों के साथ) को म्यूट करने पर एक मजबूत फोकस है, जबकि मर्कुरियल इतिहास पुनर्लेखन को प्रोत्साहित नहीं करता है, लेकिन वैसे भी करना आसान है और ऐसा करने के नतीजे बिल्कुल वही हैं जो आपको उम्मीद करनी चाहिए (वह है , यदि मैं आपके पास पहले से मौजूद एक बदलाव को संशोधित करता हूं, तो यदि आप मुझसे खींचते हैं तो आपका ग्राहक इसे नए जैसा देखेगा)। तो Mercurial गैर विनाशकारी आदेशों के प्रति पूर्वाग्रह है

हल्के वजन वाली शाखाओं के लिए, फिर Mercurial ने कई शाखाओं के साथ भंडारों का समर्थन किया है ..., हमेशा मुझे लगता है। कई शाखाओं के साथ गिट भंडार बिल्कुल ठीक है: एक ही भंडार में विकास के कई अलग-अलग तार। गिट फिर इन स्ट्रैंड्स में नाम जोड़ता है और आपको इन नामों को दूरस्थ रूप से पूछने की अनुमति देता है। Mercurial के लिए Bookmarks एक्सटेंशन स्थानीय नाम जोड़ता है, और Mercurial 1.6 के साथ, आप इन बुकमार्क को चारों ओर ले जा सकते हैं जब आप पुश / पुल करते हैं ..

मैं लिनक्स का उपयोग करता हूं, लेकिन स्पष्ट रूप से टोर्टोइज एचजी विंडोज पर गिट समकक्ष (तेज विंडोज फाइल सिस्टम के बेहतर उपयोग के कारण) से तेज़ और बेहतर है। Http://github.com और http://bitbucket.org दोनों ऑनलाइन होस्टिंग प्रदान करते हैं, बिटबकेट में सेवा बहुत अच्छी और उत्तरदायी है (मैंने जिथब की कोशिश नहीं की है)।

मैंने Mercurial चुना क्योंकि यह साफ और सुरुचिपूर्ण लगता है - मुझे गिट के साथ मिली शेल / पर्ल / रूबी स्क्रिप्ट्स द्वारा बंद कर दिया गया था। git-instaweb.sh फ़ाइल पर एक नज़र git-instaweb.sh प्रयास करें यदि आप जानना चाहते हैं कि मेरा क्या मतलब है: यह एक शेल स्क्रिप्ट है जो रूबी स्क्रिप्ट उत्पन्न करती है, जो मुझे लगता है कि एक वेबसर्वर चलाता है। शेल स्क्रिप्ट पहली रूबी स्क्रिप्ट लॉन्च करने के लिए एक और शेल स्क्रिप्ट उत्पन्न करती है। अच्छी माप के लिए, पर्ल का थोड़ा सा भी है।

मुझे ब्लॉग पोस्ट पसंद है जो जेम्स बॉन्ड और मैकजीवर के साथ मर्कुरियल और गिट की तुलना करता है - मर्कुरियल गिट की तुलना में किसी भी तरह की कम-कुंजी है। ऐसा लगता है कि Mercurial का उपयोग करने वाले लोग इतनी आसानी से प्रभावित नहीं हैं। यह दर्शाता है कि कैसे प्रत्येक सिस्टम लिनस को "सबसे अच्छा विलय कभी" के रूप में वर्णित करता है । गिट में आप एक असंबंधित भंडार के साथ विलय कर सकते हैं:

git fetch <project-to-union-merge>
GIT_INDEX_FILE=.git/tmp-index git-read-tree FETCH_HEAD
GIT_INDEX_FILE=.git/tmp-index git-checkout-cache -a -u
git-update-cache --add -- (GIT_INDEX_FILE=.git/tmp-index git-ls-files)
cp .git/FETCH_HEAD .git/MERGE_HEAD
git commit

वे आदेश मेरी आंखों के लिए काफी आर्केन दिखते हैं। Mercurial में हम करते हैं:

hg pull --force <project-to-union-merge>
hg merge
hg commit

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







dvcs