git एक Mercurial रिपोजिटरी के साथ गिट इंटरऑपरेबिलिटी




version-control interop (8)

एक नया गिट-रिमोट-एचजी है जो देशी समर्थन प्रदान करता है:

मर्कुरियल और बाज़ार के लिए गिट में ब्रिज समर्थन

बस अपने $ PATH पर git-remote-hg कॉपी करें, इसे निष्पादन योग्य बनाएं, और यह है, कोई निर्भरता नहीं (Mercurial के अलावा):

git clone hg::https://www.mercurial-scm.org/repo/hg/

आप इसे धक्का और खींचने में सक्षम होना चाहिए जैसे कि यह मूल गिट भंडार था।

जब आप नई गिट शाखाओं को दबाते हैं, तो उनके लिए Mercurial बुकमार्क्स बनाए जाएंगे।

अधिक जानकारी के लिए गिट-रिमोट-एचजी विकी देखें।

मैं एक मैक पर जीआईटी का उपयोग करता हूं। पर्याप्त कथन। मेरे पास टूल्स हैं, मेरे पास अनुभव है। और मैं इसका इस्तेमाल करना जारी रखना चाहता हूं। यहां कोई युद्ध नहीं है ...

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

अब ... कुछ लोग Mercurial के साथ आते हैं। उनके लिए ठीक है: उनके कारण हैं। लेकिन मुझे कोई भी जीआईटी एचजी आउट ऑफ़ द बॉक्स नहीं मिल रहा है। मैं एचजी में स्विच नहीं करना चाहता, लेकिन मुझे अभी भी अपने भंडार के साथ अंतःक्रिया करने की जरूरत है।

आप में से कोई भी इस के लिए एक आसान समाधान पता है?


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

अस्वीकरण: मैं इसके पीछे कंपनी से हूं।


आप एचजी-गिट का उपयोग करने में सक्षम होना चाहिए।

hg clone <hg repository>

~/.hgrc संपादित करें और जोड़ें:

[extensions]
hgext.bookmarks =
hggit =

एक बुकमार्क बनाएं ताकि आपके पास गिट में master हो:

cd <repository>
hg bookmark -r default master

भंडार में .hg/hgrc संपादित करें और जोड़ें:

[git]
intree = true

अब आप गिट भंडार बना सकते हैं:

hg gexport

और आप परिणामस्वरूप निर्देशिका को गिट क्लोन के रूप में उपयोग कर सकते हैं। Mercurial से खींच होगा:

hg pull
hg gexport

और Mercurial को धक्का:

hg gimport
hg push

(हां, आपको इस वर्कफ़्लो के साथ एचजी का उपयोग करने की आवश्यकता है लेकिन आपकी हैकिंग गिट में होगी)

पीएस अगर आपको इस वर्कफ़्लो में कोई समस्या है, तो कृपया एक बग दर्ज करें।


मैंने git-hg और git-hg-again एचजी रेपो पर कोशिश की है , ऐसा लगता है कि बाद में विलय के आदेश का सम्मान करने का सम्मान करता है, पूर्व थोड़ा यादृच्छिक है। आप नीचे स्क्रीनशॉट से देख सकते हैं।

git-hg द्वारा आयातित git-hg एक मर्ज इतिहास ग्राफ:

git-hg-again द्वारा आयातित git-hg-again एक मर्ज इतिहास ग्राफ:

Mutt के hg भंडार पर hgk द्वारा प्लॉट एक्ट्यूल इतिहास ग्राफ:

जैसा कि आप उपरोक्त से देख सकते हैं, git-hg-again द्वारा दूसरा ग्राफ मूल एचजीके ग्राफ के बहुत करीब है और वास्तव में म्यूट के वास्तविक वर्कफ़्लो को प्रतिबिंबित कर रहा है।

मुझे लगता है कि गिट-एचजी-फिर से एक दोष यह है कि यह 'एचजी' रिमोट नहीं जोड़ता है, बल्कि स्थानीय टैग के रूप में अपने सभी रेफरी आयात करता है, गिट-एचजी के पास एक अद्भुत 'एचजी' रिमोट अपस्ट्रीम एचजी रेपो का प्रतिनिधित्व करता है।


जून 2012 से अपडेट करें। वर्तमान में गिट / एचजी इंटरऑपरेबिलिटी के लिए निम्न विधियां प्रतीत होती हैं जब डेवलपर गिट साइड से काम करना चाहता है:

  1. Mercurial और एचजी-गिट एक्सटेंशन स्थापित करें। आप बाद में अपने पैकेज मैनेजर का उपयोग कर सकते हैं, या easy_install hg-git साथ कर सकते हैं। फिर सुनिश्चित करें कि निम्नलिखित आपके ~ / .hgrc में है:

    [extensions]
    hggit = 
    

    आप कुछ संदर्भ देख सकते हैं जो यहां bookmarks एक्सटेंशन निर्दिष्ट करने के बारे में भी बात करते हैं, लेकिन इसे v 1.8 से Mercurial में बनाया गया है। विंडोज़ पर एचजी-गिट स्थापित करने के बारे में कुछ सुझाव दिए गए हैं।

    एक बार आपके पास एचजी-गिट हो जाने के बाद, आप ऊपर पोस्ट किए गए Abderrahim Kitouni की तरह कमांड का उपयोग कर सकते हैं। हालांकि इस विधि को परिष्कृत किया गया है और 200 9 से tweaked हालांकि, और एक दोस्ताना आवरण है: git-hg-again । यह एक ही समय में Mercurial और Git दोनों के लिए एक कार्यशील निर्देशिका के रूप में अपूर्ण निर्देशिका का उपयोग करता है। यह एक Mercurial बुकमार्क बनाता है कि यह Mercurial भंडार में default (अनामित) शाखा की नोक के साथ synch में रहता है, और यह उस बुकमार्क से एक स्थानीय गिट शाखा अद्यतन करता है।

  2. git-remote-hg एक अलग रैपर है, जो Mercurial hg-git एक्सटेंशन पर भी आधारित है। यह अतिरिक्त रूप से git-remote-helpers प्रोटोकॉल (इसलिए इसका नाम) का उपयोग करता है। यह केवल गिट कार्य निर्देशिका के लिए अपूर्ण निर्देशिका का उपयोग करता है; यह अपने Mercurial भंडार नंगे रखता है। यह गिट और मर्कुरियल सुरक्षित और अधिक idiomatically gitlike के बीच सिंकिंग करने के लिए एक दूसरी नंगे गिट भंडार भी बनाए रखता है।

  3. git-hg स्क्रिप्ट (जिसे पहले here बनाए रखा here ) तेजी से निर्यात परियोजना से hg-fast-export पर आधारित एक अलग विधि का उपयोग करता है। विधि 2 की तरह, यह एक नंगे Mercurial भंडार और एक अतिरिक्त नंगे गिट भंडार रखता है।

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

    कुछ टिप्पणी इस उपकरण को केवल एचजी-> गिट होने के रूप में चर्चा करती है, लेकिन यह 7 दिसंबर 2011 को गिट-> एचजी पुश समर्थन में विलय करने का दावा करती है। जैसा कि मैंने इन उपकरणों की समीक्षा में समझाया है, वैसे ही, इस उपकरण को लागू करने का प्रयास करने का तरीका पुश समर्थन व्यावहारिक प्रतीत नहीं होता है।

  4. गिट-रिमोट-एचजी नामक एक अन्य परियोजना भी है। ऊपर सूचीबद्ध संस्करण के विपरीत, यह एचजी-गिट पर भरोसा नहीं करता है, बल्कि इसके बजाय सीधे Mercurial Python API तक पहुंचता है। फिलहाल, इसका उपयोग करने के लिए गिट के पैच किए गए संस्करण की भी आवश्यकता होती है। मैंने अभी तक यह कोशिश नहीं की है।

  5. अंत में, Tailor एक ऐसी परियोजना है जो विभिन्न प्रकार के विभिन्न वीसीएस के बीच वृद्धिशील रूप से परिवर्तित होती है। ऐसा लगता है कि इसका विकास आक्रामक रूप से जारी नहीं होगा।

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

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

जैसा कि मैंने उपर्युक्त उल्लेख किया है, इन उपकरणों का मूल्यांकन करने में, मैं इस निष्कर्ष पर पहुंचा कि git-hg केवल मर्कुरियल से खींचने के लिए प्रयोग योग्य है, न कि धक्का देने के लिए।

संबंधित रूप से, यहां गिट और मर्कुरियल के बीच कुछ उपयोगी तुलना / अनुवाद मैनुअल हैं, कुछ मामलों में उन उपयोगकर्ताओं पर लक्षित है जो पहले से ही गिट को जानते हैं:



आग्रह किया है कोशिश की है। मेरे लिए काम करता है, क्योंकि मुझे गिटर्स और एचजीर्स के काम का सामना करना पड़ता है। विशेष रूप से समीक्षा के लिए यह बहुत अच्छा है।

उस विषय पर एक मामूली समस्या / चेतावनी:

मैंने एचजी के साथ एक स्थिर लिनक्स कर्नेल भंडार क्लोन करने की कोशिश की है। इन भंडारों को गिट में बनाए रखा जाता है और आमतौर पर इसमें बड़ी संख्या में फाइलें होती हैं।

यह बहुत धीमा था। पूरी तरह से क्लोन करने के लिए मुझे 2 दिन लगे और एक कामकाजी प्रति अपडेट करें।


मुझे git-hg से git-hg साथ बड़ी सफलता मिली है ( hg भी काम स्थापित करने की आवश्यकता है)। यह fetch, pull और push का समर्थन करता है और hg-git ( hg से गिट तक की समान विशेषताएं) की तुलना में मेरे लिए अधिक स्थिर है।

उपयोग उदाहरणों के लिए https://github.com/cosmin/git-hg#usage देखें। यूजर इंटरफेस git-svn समान है।

git-hg को प्रत्येक क्लोन एचजी रेपो के लिए अतिरिक्त डिस्क स्थान की आवश्यकता होती है। कार्यान्वयन पूर्ण Mercurial क्लोन, एक अतिरिक्त गिट नंगे क्लोन और वास्तविक गिट रेपो का उपयोग करता है। आवश्यक डिस्क स्थान सामान्य गिट केवल उपयोग के लगभग 3 गुना है। अतिरिक्त प्रतियां आपकी कार्यशील निर्देशिका की GIT_DIR निर्देशिका (या सामान्य रूप से GIT_DIR द्वारा इंगित स्थान) के नीचे संग्रहीत की जाती हैं।

नोटिस: git-hg को हल करने का प्रयास करने वाली मूल समस्या यह है कि git और hg सुविधाओं के बीच कोई 1: 1 मैपिंग नहीं है। सबसे बड़ी समस्या गिट शाखाओं और एचजी नामित शाखाओं और एचजी नाम शाखाओं और एचजी बुकमार्क्स के बीच प्रतिबाधा विसंगति है (वे सभी उपयोगकर्ताओं को git करने के लिए शाखाओं की तरह दिखते हैं)। एक संबंधित समस्या यह है कि hg संस्करण नाम में मूल नामित शाखा नाम को गिट के विपरीत सहेजने का प्रयास करता है जहां शाखा का नाम केवल डिफ़ॉल्ट रूप से टेम्पलेट प्रतिबद्ध संदेश में जोड़ा जाता है।

कोई भी उपकरण जो git और hg बीच इंटरऑपरेबल पुल बनाने का दावा करता है उसे यह समझाना चाहिए कि यह इस प्रतिबाधा मैच से कैसे निपटने जा रहा है। फिर आप तय कर सकते हैं कि चयनित समाधान आपकी आवश्यकताओं के अनुरूप है या नहीं।

git-hg का उपयोग करने वाले समाधान सभी एचजी बुकमार्क्स को त्यागना और नामित शाखाओं को गिट शाखाओं में परिवर्तित करना है। इसके अलावा यह गिट मास्टर शाखा को डिफ़ॉल्ट नामित एचजी शाखा में सेट करता है।





dvcs