2011-08-15 11 views
5

मैंने अपने पावरशेल कोड में संशोधन को बेहतर तरीके से प्रबंधित करने के लिए संस्करण नियंत्रण का उपयोग शुरू कर दिया है। मैंने 3 मुख्य कारणों से Mercurial का उपयोग करने का निर्णय लिया:मुझे उसी पथ में संस्करण नियंत्रण (प्रकार) असंबद्ध स्क्रिप्ट कैसे करना चाहिए?

  1. एक डीवीसीएस के रूप में, इसे सर्वर की आवश्यकता नहीं होती है।
  2. यदि मैं चाहता हूं, तो मैं मुफ्त में एक निजी भंडार ऑनलाइन स्टोर कर सकता हूं (bitbucket.org)
  3. गिट की तुलना में उपयोग करना आसान लग रहा था।

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

मुझे संस्करण एकल स्क्रिप्ट कैसे करना चाहिए?

मैं निम्नलिखित विकल्पों के बारे में सोचा गया है:

  • प्रत्येक स्क्रिप्ट/संबंधित स्क्रिप्ट के लिए उप-निर्देशिका बनाएँ।
  • स्क्रिप्ट "स्थिर" होने तक अस्थायी भंडारों का उपयोग करें, फिर स्क्रिप्ट को मुख्य "स्क्रिप्ट" निर्देशिका में जोड़ें और संस्करण को स्क्रिप्ट के संग्रह के रूप में जोड़ें। इससे "स्क्रिप्ट" भंडार में पेश किए गए परिवर्तनों की संख्या कम हो जाएगी।

क्या कोई ऐसा उपकरण है जो संस्करण एकल फ़ाइलों को बेहतर तरीके से संभालता है? Mercurial के साथ एकल फाइल संस्करण संस्करण के लिए बेहतर तरीका है? कोई अन्य विचार? उनकी कार्यक्षमता के आधार पर फ़ाइलों का

+0

यह एक आसान उपकरण हो सकता है, मैं अक्सर ऐसा कुछ चाहता हूं, संस्करण व्यक्तिगत कॉन्फ़िगरेशन और स्क्रिप्ट फ़ाइलों की क्षमता। –

+0

एक डीवीसीएस में स्क्रिप्ट रखने के लिए एक और जोड़ा गया बोनस यह है कि आपके पास साझा ड्राइव पर रिपोजिटरी हो सकती है और जब आपको इसकी ज़रूरत होती है तो आपके सभी सर्वरों में परिवर्तन खींच सकते हैं और आपके पास हमेशा स्क्रिप्ट का अद्यतित संस्करण होगा। –

उत्तर

9

समूहीकरण पर

1) नाम आधारित होना चाहिए।

2) फ़ोल्डर वे कर रहे हैं।

बस स्क्रिप्ट के लिए एक उचित नाम दें। यदि कई संबंधित स्क्रिप्ट्स उन्हें एक फ़ोल्डर में समूहित करते हैं। प्रति फ़ोल्डर एक स्क्रिप्ट होने का कोई मतलब नहीं है। आप स्क्रिप्ट के रूप में लगभग उसी फ़ोल्डर के साथ समाप्त होते हैं।

यह सब एक ही भंडार में है। आम तौर पर, लोगों के पास एक एकल रेपो में कई परियोजनाएं होती हैं। कई रिपोस बनाना, खासकर कुछ फाइलों के लिए बहुत सारे ओवरहेड का मतलब है। यदि स्क्रिप्ट "स्थिर" शाखाओं का उपयोग नहीं करती है। यही वह है जो वे हैं और उन्हें वापस विलय करते हैं।

और चिंता न करें रेपो में कितने "परिवर्तन" हैं!

पीएस: थोड़ा सा विचार किया जा सकता है, लेकिन आप जो पूछते हैं उसके लिए कोई वास्तविक अधिकार या गलत जवाब नहीं है।

+0

मैं आपके उत्तर की सराहना करता हूं। मुझे पता है कि एसवीएन जैसी वीसीएस के साथ कई परियोजनाओं को आमतौर पर 1 रेपो में समूहीकृत किया जाता है, लेकिन रेको स्तर पर मर्कुरियल प्रतिबद्धताएं बनाई जाती हैं। इस प्रकार परियोजनाओं को आम तौर पर अलग रखा जाता है (देखें: http://stackoverflow.com/questions/929508/mercurial-with-multiple-projects)। मैं मानता हूं कि स्क्रिप्ट को अलग फ़ोल्डर्स में रखना कुशल नहीं है, लेकिन ऐसा लगता है कि असंबंधित स्क्रिप्ट्स का समूह भी ऐसा ही व्यवस्थित नहीं है। ऐसा लगता है कि मैं कम से कम 2 बुराइयों को चुनने की कोशिश कर रहा हूं; सिर्फ राय की तलाश में। – Rynant

+0

@Rynant - गिट - http://stackoverflow.com/questions/7033601/multiple-projects-in-one-git-repo/7033648#7033648 के लिए एक समान प्रश्न पर मेरा उत्तर यहां दिया गया है। मैं समझता हूं, लेकिन आप फ़ाइल स्तर पर बात कर रहे थे, वह भी स्क्रिप्ट (टेक्स्ट) फाइलें। इस संदर्भ में अलग-अलग प्रतिनिधि होने के लिए यह और अधिक चोट पहुंचाएगा। – manojlds

+0

मैं @manojlds से सहमत हूं, वीसीएस को आपके लिए अपना काम करने दें। – JasonMArcher

3

वापस कदम, आराम करें, और खुद से पूछें कि क्या यह premature optimization है। वीसीएस का उपयोग करने का प्राथमिक लाभ यह है कि आप को "सही" समाधान से शुरू करने के बारे में चिंता करने की आवश्यकता नहीं है। डीवीसीएस change history across renames & moves ट्रैक करता है (hg mv का उपयोग करें, या hg addremove --similarity के साथ ऑटो-डिटेक्शन का प्रयास करें)।

ये स्क्रिप्ट एक "में हैं।\ स्क्रिप्ट्स "निर्देशिका जो $ env में जोड़ा गया है: पथ इसलिए मैं उन्हें कमांड लाइन से आसानी से चला सकता हूं। चूंकि ये स्क्रिप्ट वास्तव में एक-दूसरे से संबंधित नहीं हैं, इसलिए स्क्रिप्ट्स के लिए एक एकल संग्रह बनाने के लिए यह बहुत अधिक समझ में नहीं आता है निर्देशिका

स्क्रिप्ट एक ही निर्देशिका में सभी कर रहे हैं, यह निश्चित रूप से समझ में आता है उन्हें एक ही भंडार में ट्रैक करने के लिए।

  • अस्थायी खजाने का प्रयोग करें जब तक स्क्रिप्ट "स्थिर" है। ..

एक "अस्थायी" रेपो एक रेपो रखने के उद्देश्य को हरा देता है, जिसमें परिवर्तनों का इतिहास होना है।

इससे "स्क्रिप्ट" भंडार में पेश किए गए परिवर्तनों की संख्या कम हो जाएगी।

जैसा कि @manojlds ने कहा, परिवर्तनों की संख्या के बारे में चिंता करने का कोई कारण नहीं है। कोई नहीं।

मेरी सलाह:

  • तरह ./Scripts/incubating/
  • एक निर्देशिका में अपने प्रयोगात्मक लिपियों रखो जब एक स्क्रिप्ट परिपक्व, यह ./Scripts/ या ./Scripts/Foo/ या जो कुछ भी में डाल दिया; उपयोग hg mv मदद करने के लिए मर्क्युरियल कदम को ट्रैक/
    • का नाम बदलें या करने के लिए hg addremove --similarity का उपयोग स्वत: पता लगाएं चाल/
  • स्क्रिप्ट का परिवर्तन इतिहास संरक्षित है नाम बदलता है और आप के रूप में अपनी स्क्रिप्ट निर्देशिका पुनर्निर्माण कर सकते हैं अपने संग्रह विकसित होता है
+0

सलाह के लिए धन्यवाद; मुझे लगता है कि मुझे विश्लेषण पक्षाघात से मारा गया हो सकता है: -/मुझे यह एक अजीब लगता है कि एक स्क्रिप्ट है जो पीयर-टू-पीयर एसक्यूएल प्रतिकृति और एक अन्य स्क्रिप्ट को कॉन्फ़िगर करती है जो डोमेन की कंप्यूटर सूची एकत्र करती है, और उसी भंडार में उन्हें ट्रैक करती है। – Rynant

2

मुझे लगता है कि यहां चापों के कुछ अच्छे विचार हैं और आपने ध्यान दिया है कि आप इस पर थोड़ा अधिक ध्यान केंद्रित कर सकते हैं। पूरी तरह से निस्संदेह स्रोत नियंत्रण के लिए टोम की मार्गदर्शिका http://powertoe.wordpress.com/2010/12/12/why-every-it-pro-should-use-mercurial-for-source-control-with-their-powershell-scripts/

मैंने इस विधि का पालन किया है और इसे बहुत उपयोगी पाया है। 2 कारणों से मैं स्रोत नियंत्रण उपयोगी लगी:

  1. एक बुरा दिन और एक स्क्रिप्ट फिर से लिखा इतना है कि यह कुछ भी नहीं है कि आप यह करना चाहते हैं और आप कैसे इसे वापस पाने के लिए याद नहीं कर सकते!

  2. ज़रूरतों में बदलाव, कभी-कभी आपको छोटी अवधि के लिए मॉनिटर करने या कुछ करने के लिए एक स्क्रिप्ट की आवश्यकता होती है और फिर उसे मूल सेट अप पर वापस जाने की आवश्यकता होती है। स्रोत नियंत्रण के साथ आसानी से किया।

इस प्रकार, एक रेपो में सभी स्क्रिप्ट होने से वास्तव में कोई समस्या नहीं है।

मुझे आश्चर्य हुआ कि क्या आप कंप्यूटर को सिंक्रनाइज़ करने के लिए इसका उपयोग कर सकते हैं (स्वचालित रूप से जब आवश्यक हो तो खींचने के बजाए) लेकिन यह ऐसा कुछ नहीं है जिसे मैंने देखने के लिए समय दिया है।

+0

मैंने टोम की पोस्ट देखी है; यह उन चीजों में से एक था जिसने मुझे स्रोत नियंत्रण के लिए Mercurial की तरफ इशारा किया। अभी के लिए, मैं स्वचालित प्रतिबद्धता निर्धारित करने के लिए नहीं जा रहा हूँ। – Rynant

+0

मैंने कंप्यूटर को सिंक करने के लिए बिटबकेट से धक्का/खींचने के बारे में भी सोचा है। वर्तमान में, मैं अपनी अधिकांश पावरशेल स्क्रिप्ट को स्टोर करने के लिए ड्रॉपबॉक्स का उपयोग कर रहा हूं। 'profile.ps1' बस'। \ Dropbox \ PSH \ Profile' में 'My.profile.ps1' फ़ाइल को डॉट-स्रोत करता है। 'My.profile.ps1' फिर '$ Host.Name' पर आधारित डॉट-स्रोत अतिरिक्त स्क्रिप्ट्स। काम पर क्यूए डोमेन में मैं एक ही चीज करता हूं जो एक fileshare पर स्क्रिप्ट के अलावा। – Rynant

+0

दोनों अच्छे विचार हैं। क्या मैं मर्कुरियल एससी स्थापित कर रहा था, उन सेवाओं में से किसी एक तक पहुंच नहीं थी, मुझे एक मर्कुरियल सर्वर चलाने के बारे में कुछ भी नहीं पता था, इसलिए मैंने सोचा कि जब तक यह शांत से कुछ और नहीं बन जाता है :) – Matt