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




version-control interop (7)

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

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

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

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

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

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

अब ... कुछ लोग 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

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

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


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

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

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

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

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

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

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


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


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


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

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

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

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

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

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








dvcs