2010-03-03 15 views
22

मैं TortoiseHg का उपयोग करके नेस्टेड रिपॉजिटरीज को सही ढंग से ट्रैक करने के तरीके पर संघर्ष कर रहा हूं।Mercurial/TortoiseHg के साथ घोंसला वाले एचजी भंडारों को संभालने का सही तरीका क्या है?

मेरे पास एक मुख्य भंडार है जो मेरी पूरी परियोजना को ट्रैक करता है। इस प्रोजेक्ट में कई छोटे प्लगइन्स हैं जो प्लगइन/उपनिर्देशिका के अंदर संग्रहीत हैं।

मुझे प्रत्येक प्लगइन को स्वतंत्र रूप से ट्रैक करना होगा (उनमें से प्रत्येक के लिए बिटबकेट करना और धक्का देना) जबकि अभी भी मेरे प्रोजेक्ट की "पूरी" प्रतिबद्धता बनाने में सक्षम है, जिसमें प्लगइन में किए गए परिवर्तन और इसे धक्का देना शामिल है एक अन्य स्थान (बिटबकेट नहीं)।

जो मैंने अभी तक किया है वह मेरे प्रत्येक प्लगइन के लिए एक नया रेपो बना रहा है। मैं उन्हें प्रतिबद्ध और बिटबकेट में आसानी से धक्का दे सकता हूं। लेकिन जब मैं अपना "मुख्य" भंडार करने के लिए गया, तो TortoiseHg एक त्रुटि संदेश प्रदर्शित करता है जिसमें कहा गया है कि abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'

मैं देख सकता हूं कि मैं कुछ गलत कर रहा हूं, लेकिन मैं यह नहीं बता सकता।

मैं WinXP पर Mercurial और TortoiseHg (ToirtoiseHg संस्करण 0.9.3 + 237-ea50f793bbe4 और Mercurial-1.4.3 + 225-70dea42c9406) दोनों की रात का उपयोग कर रहा हूं। मैंने पढ़ा है कि इस टोर्टोइज एचजी बिल्ड में सब्रेप हैंडलिंग को जोड़ा गया था, लेकिन, ठीक है, मुझे यह भी यकीन नहीं है कि सब्रेपोज़ ऐसी सुविधा है जिसे मैं यहां उपयोग करना चाहता हूं।

अद्यतन
मैं कुछ प्रगति की है, लेकिन अभी भी यह रास्ता नहीं मैं चाहता हूँ काम करने के लिए नहीं मिल सकता है। यहाँ

-- .hg 
-- core 
-- app 
    -- file.php 
    -- file.css 
    -- plugins 
     -- plugin1 
      -- file1.php 
     -- plugin2 
      -- file2.php 

मैं अनुप्रयोग/plugins के पास गया, और एक प्लगइन (नाम plugin3) क्लोन BitBucket से:
यहाँ मेरी संरचना है। मैंने रूट पर एक .hgsub फ़ाइल बनाई और इसमें app/plugins/plugin3 = app/plugins/plugin3 जोड़ा। मैं तब अपनी पूरी निर्देशिका करने में सक्षम था।

लेकिन फिर मैंने बिटबकेट से प्लगइन 1 के नवीनतम संस्करण को पकड़ने की कोशिश की, इसलिए मैं ऐप/प्लगइन्स पर गया, प्लगइन 1/फ़ोल्डर हटा दिया और बिटबकेट से प्लगइन 1 को क्लोन किया। मैं तो app/plugins/plugin1 = app/plugins/plugin1 जोड़ा .hgsub लिए लेकिन जब मैं यह करने की कोशिश की मैं abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

के साथ स्वागत किया गया था समस्या आग जब मेरे subrepo पहले से ही plugins/निर्देशिका में एचजी द्वारा पता लगाया एक निर्देशिका के रूप में एक ही नाम रखती है लगता है।

क्या मैं गलत कर रहा हूँ? क्या मुझे अपने प्लगइन के .hg में कुछ खास जोड़ना/संपादित करना चाहिए?

अद्यतन
मैं अंत में यह रास्ता मैं चाहता हूँ काम करने के लिए प्राप्त करने के लिए प्रबंधित किया है।
मैं "मैन्युअल" मर्क्युरियल बताने के लिए plugins/plugin1, plugins/plugin2 निर्देशिका दूर करने के लिए, परिवर्तन के लिए प्रतिबद्ध है, तो BitBucket से plugin1 और plugin2 वापस क्लोन, app/plugins/plugin1 = app/plugins/plugin1 जोड़ने .hgsub और सभी प्रतिबद्ध करने के लिए किया था। इसने काम कर दिया।
प्लगइन 1/प्लगइन 2 फ़ोल्डर्स को हटाने के बाद महत्वपूर्ण कदम उठा रहा था।

+0

डॉक्टर से, '.hgsub' वाली रेखा "पहले' नेस्टेड 'हमारे कामकाजी डीआईआर में पथ है, और दूसरा एक यूआरएल या पथ है जो खींचने के लिए है": तो आपको ' ऐप/प्लगइन्स/प्लगइन 3 = ऐप/प्लगइन्स/प्लगइन 3' लेकिन प्लगइन 3 के लिए ऐप/प्लगइन्स/प्लगइन 3 = बिटबकेट यूआरएल। प्लगइन 1 – VonC

+0

के लिए डिट्टो मैंने कोशिश की है, 'http: // bitbucket.org/username/plugin3/',' https: // उपयोगकर्ता नाम @ bitbucket.org/username/plugin3/'और यहां तक ​​कि' ssh: // hg @ bitbucket.org/उपयोगकर्ता नाम/प्लगइन 3 यूआरएल के रूप में लेकिन अभी भी एक ही निरस्त संदेश है। मैंने एलोस को कमांड लाइन से सीधे कोशिश की है, और नतीजा वही है। – pixelastic

+0

आपकी आखिरी टिप्पणी का जवाब न देने के लिए खेद है, लेकिन जब तक आपकी टिप्पणी '@VonC' से शुरू नहीं होती है, तो मुझे अधिसूचित नहीं किया जाएगा। Http://blog.stackoverflow.com/2010/01/new-improved-comments-with-reply/ (अनुभाग "टिप्पणी @ उपयोगकर्ता नाम अधिसूचनाएं") – VonC

उत्तर

18

मैं अंततः इसे जिस तरह से प्यार करता हूं उसे काम करने में कामयाब रहा हूं। मैं WinXP पर TortoiseHg का उपयोग कर रहा हूं, इसलिए मैं आपको यह बताने में सक्षम नहीं हूं कि एचजी कॉल आंतरिक रूप से किए गए थे, लेकिन मुझे नहीं लगता कि यहां कुछ भी फैंसी का उपयोग किया जाता है।

मैं एक मौजूदा रेपो, जो अंदर मैं plugin1/, plugin/2 निर्देशिका (नहीं खजाने, बस सरल निर्देशिका) से भरा एक plugins/ निर्देशिका था के साथ शुरू कर दिया। मेरे पास उन प्लगइन्स ऑनलाइन भी थे, जिन्हें बिटबकेट पर होस्ट किया गया था।

  • मैं पहली बार मेरी plugins/ निर्देशिका के लिए गया था, सही plugin1/, TortoiseHg => Remove Files पर क्लिक करें।
  • मैं अपने रेपो की जड़ तक वापस पाने, राइट क्लिक करें और Hg Commit
  • तब मैं अपनी plugins/ निर्देशिका के लिए गया था, राइट क्लिक करें, TortoiseHg => Clone..., मैं थोड़ा बाल्टी पर प्लगइन का http पता चयनित (http://bitbucket.org/username/plugin1/ और Done क्लिक किया
  • वापस मुख्य रेपो की जड़ तक फिर से। मैं बनाया (या यदि फ़ाइल पहले से ही अस्तित्व में संपादित) एक .hgsub फ़ाइल और इसके अंदर plugins/plugin1 = plugins/plugin1 पंक्ति जोड़ें।
  • मैं तो या तो मुख्य जड़ रेपो प्रतिबद्ध करने में सक्षम था , या प्लगइन 1 रेपो स्वतंत्र रूप से

ध्यान दें कि अतिरिक्त remove और commit चरण केवल तभी आवश्यक हैं जब नए क्लोन रेपो के पास पहले से ट्रैक की गई निर्देशिका का एक ही नाम हो।

+0

@ पिक्सेलैस्टिक: प्रतिक्रिया के लिए धन्यवाद (+1) – VonC

+0

मीठे। आपने मेरे कुछ प्रश्नों का उत्तर दिया है। –

5

आप का उपयोग कर प्रयास करना चाहिए:

  • Forest extension या
  • (बेहतर विकल्प, एचजी में आधिकारिक तौर पर क्योंकि): Subrepo feature

Subrepositories एक विशेषता यह है कि आप के लिए अनुमति देता है एक समूह के रूप में भंडारों के संग्रह का इलाज करें।
यह आपको समूह के रूप में परियोजनाओं और उनके संबंधित पुस्तकालयों को क्लोन करने, प्रतिबद्ध करने, धक्का देने और खींचने की अनुमति देगा।

+0

क्या मुझे मैन्युअल रूप से .hgsub फ़ाइलों को संपादित करना है या TortoiseHg हैंडल है कि सभी स्वयं (कुछ विकल्पों की जांच के माध्यम से)? – pixelastic

+0

@ पिक्सेलैस्टिक: TortoiseHg और subrepos के लिए, http: // stackoverflow देखें।कॉम/प्रश्न/20833 9 3/Mercurial-subrepos-how-do-you-create-them-and-how-do-they-work – VonC

+0

@ वॉनसी: धन्यवाद, लेकिन मैंने पहले से ही उस लेख को पढ़ लिया है और मैं नहीं चाहता मेरे मुख्य ऐप के रूप में एक अलग फ़ोल्डर में मेरे प्लगइन्स, मैं उन्हें उप-निर्देशिका के रूप में पसंद करूंगा। मैंने अपनी प्रगति के साथ मुख्य प्रश्न अपडेट किया है। आपके समय के लिए धन्यवाद – pixelastic

संबंधित मुद्दे

 संबंधित मुद्दे