2012-07-18 15 views
42

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

EGit के लिए मार्गदर्शिका कई परियोजनाओं को एक गिट भंडार में डालने का सुझाव देती है।

इसी तरह के प्रश्नों को देखकर such as this प्रति एक प्रोजेक्ट का सुझाव देते हैं।

कौन सा दृष्टिकोण सर्वोत्तम अभ्यास है और लोग क्या लागू करते हैं?

उत्तर

43

यह इस परियोजना पर कितनी बारीकी से संबंधित है इस पर निर्भर करता है। अपने आप से निम्नलिखित प्रश्न पूछें:

  • क्या उन्हें हमेशा ब्रांच/एक साथ टैग करने की आवश्यकता होगी?
  • क्या आप सभी परियोजनाओं पर प्रतिबद्ध होना चाहते हैं, या प्रतिबद्धता केवल एक परियोजना को स्पर्श करती है?
  • क्या बिल्ड सिस्टम उन सभी पर काम करता है या क्या उनके पास सीमा है?

यदि आप उन्हें एक में रखते हैं, तो ऊपर से कुछ चीजें आसान होंगी। आपको केवल एक संग्रह में शाखा/टैग/स्टेश/प्रतिबद्ध करना होगा, क्योंकि प्रत्येक रिपोजिटरी के लिए इसे अलग-अलग करने के विपरीत।

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

ध्यान दें कि आप हमेशा बाद में एक संग्रह को विभाजित कर सकते हैं, या इतिहास खोए बिना एक बार फिर से कई रिपॉजिटरीज को जोड़ सकते हैं।

संयोजन विभाजन से थोड़ा कठिन करना है, इसलिए मैं पहले एक भंडार के लिए जाऊंगा और देख सकता हूं कि यह कैसा चल रहा है।

+0

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

+4

विभाजन करके मेरा मतलब है एक संग्रह लेना और इसे एक बार रूपांतरण का उपयोग करके एकाधिक में विभाजित करना, उदा। [गिट फ़िल्टर-शाखा - सब्सडायरेक्टरी-फ़िल्टर] के साथ (http://git-scm.com/docs/git-filter-branch#_examples)। संयोजन के माध्यम से मेरा मतलब है कि कई रिपॉजिटरीज़ लेना और संयुक्त इतिहास के साथ एक नया भंडार बनाना (फिर से, एक बार रूपांतरण), उदा। [सिलाई-रेपो स्क्रिप्ट] के साथ (http://search.cpan.org/~book/Git-FastExport-0.07/script/git-stitch-repo)। संयोजन कठिन है क्योंकि अलग-अलग इतिहास को एक साथ "बुनाई" होना पड़ता है। – robinst

+0

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

2

शायद, यदि आप एकाधिक गिट भंडार बनाएंगे तो यह काम करने के लिए और अधिक सक्षम होगा।

यदि आप एक शाखा बनायेंगे, तो केवल परियोजना की फाइलों को ब्रांच किया जाएगा, न कि सभी परियोजनाएं। छोटी परियोजना यह विश्लेषण करने के लिए, तेजी से विश्लेषण करने के लिए तेजी से होगा। संचालन में कम समय लगेगा।

लॉग अधिक स्पष्ट होगा, यदि आप एकाधिक गिट भंडार प्राप्त करेंगे तो आप अधिक दलित विन्यास कर सकते हैं।

17

मैं प्रति परियोजना 1 रेपो का उपयोग करता हूं।

कुछ तर्क:

  • जब आप आप कई प्रतिबद्ध के बाद कुछ गड़बड़ की खोज है, यह जब यह सिर्फ एक परियोजना है ठीक करने के लिए बहुत आसान है। बस इसके बारे में सोचें, आपने दो अन्य परियोजनाओं में काम किया है और अब आपको तीसरी परियोजना पर किए गए प्रतिबद्धता को ठीक करने की जरूरत है।

  • जैसा कि फेडरर ने कहा था, आपका इतिहास और लॉग बहुत साफ है। यह केवल उस परियोजना के लिए प्रतिबद्धता दिखाता है।

  • यह मेरे पास विकास कार्यप्रवाह के साथ बेहतर काम करता है। मैं उत्पादन के लिए एक मास्टर शाखा है, के लिए, ठीक है, विकास शाखा का विकास, और मैं सुविधाओं को लागू करने शाखाओं बनाने (आप इसके बारे में यहाँ और अधिक पढ़ सकते हैं: http://blog.avirtualhome.com/development-workflow-using-git/)

  • जब आप एक टीम में काम है, और इसलिए "शेयर "गिट रेपो, क्या टीम के सदस्यों को वास्तव में अन्य सभी परियोजनाओं की भी आवश्यकता है?

बस कुछ विचार, लेकिन यह क्या उबलता है: क्या आपके लिए काम करता है।

7

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

16

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

संक्षेप में निम्नलिखित नियमों को लागू करने के लिए सबसे अच्छा परिणाम देगा:

  1. प्रत्येक परियोजना के समूह के लिए पृथक भंडार करें।
  2. प्रत्येक प्रोजेक्ट समूह में परियोजनाओं का एक समूह होता है जो एक-दूसरे से कड़े से जुड़े होते हैं, जिन्हें एक साथ प्रशासित किया जाना चाहिए और जिन्हें आसानी से एक दूसरे से अलग नहीं किया जा सकता है।
  3. एक प्रोजेक्ट समूह में एक एकल प्रोजेक्ट हो सकता है।
  4. एक परियोजना समूह है कि कई परियोजनाओं में शामिल है, को देखने के लिए अपनी परियोजनाओं में से कुछ एक दूसरे से decoupled किया जा सकता यदि ऐसा है तो यह छोटे परियोजना समूहों है कि अभी भी कर रहे हैं परियोजनाओं कि कसकर एक दूसरे से जुड़े हुए हैं शामिल में विभाजित किया जा सकता है जांच की जानी चाहिए कि ऐसा करना चाहिए एक साथ प्रशासित किया जाना चाहिए और इसे आसानी से एक दूसरे से नहीं हटाया जा सकता है।

    1. एक परियोजना बारीकी से (उदाहरण के लिए किसी अन्य परियोजना से जुड़ा नहीं है, तो परियोजना:

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

  5. यदि कोई परियोजना अन्य परियोजनाओं या अन्य परियोजनाओं पर निर्भर है तो परियोजना पर निर्भर करती है तो यह एक दूसरे पर कितनी जुड़ा हुआ है, कितनी अच्छी तरह से उन्हें पैक किया जा सकता है और उन्हें प्रत्येक से कितनी आसानी से हटाया जा सकता है अन्य।

ए) उदाहरण के लिए एक परीक्षण परियोजना है कि JUnit परीक्षण कक्षाएं एक मुख्य परियोजना की कक्षाओं का परीक्षण करने में शामिल है एक मामले में जहां दो परियोजनाओं बहुत एक दूसरे के साथ जुड़े हुए हैं है, आसानी से एक साथ पैक किया जा सकता है और आसानी से नहीं किया जा सकता एक दूसरे से decoupled। इन परियोजनाओं को नीचे भाग सी में बताए गए कारणों के लिए एक ही भंडार में रखा जाना चाहिए।

बी) ऐसे मामले में जहां एक परियोजना किसी अन्य प्रोजेक्ट पर निर्भर करती है ताकि कुछ प्रकार के साझा संसाधन उपलब्ध करा सकें, यह वास्तव में नीचे आ जाता है कि उन्हें कितनी अच्छी तरह से प्रशासित किया जा सकता है और उन्हें कितनी आसानी से एक दूसरे से हटाया जा सकता है। उदाहरण के लिए यदि साझा संसाधनों के साथ परियोजना कई परियोजनाओं पर निर्भर है, तो इसे अपने स्वयं के भंडार में रखा जाना चाहिए क्योंकि अन्य असंबंधित परियोजनाओं को साझा स्रोत कोड प्रोजेक्ट में परिवर्तनों से प्रभावित किया जाता है। इस तरह के मामले में, साझा संसाधन परियोजना को निर्भर परियोजनाओं से सीधे जुड़े होने की बजाय निर्भर परियोजनाओं से तय किया जाना चाहिए। (उदाहरण के लिए, संस्करणित संग्रह फ़ाइलों को बनाने के लिए बेहतर होगा [उदाहरण के लिए "प्रोजेक्टनाम" .1.0.1.0.jar जैसे नाम वाले जार फाइलें] और परियोजनाओं को जोड़कर संसाधनों को साझा करने के बजाय प्रत्येक प्रोजेक्ट में उन लोगों की एक प्रति शामिल करें एक साथ।)

सी) यदि एकाधिक परियोजनाएं जुड़े हुए हैं, तो आसानी से एक साथ प्रशासित किया जा सकता है लेकिन आसानी से एक दूसरे से decoupled नहीं किया जा सकता है, तो यह इस बात पर निर्भर करता है कि वे एक दूसरे के साथ कितनी कसकर जुड़े हुए हैं।

I) यदि परियोजनाओं को एक भंडार में रखा जाता है, तो परियोजनाओं को प्रत्येक बार एक प्रतिबद्धता में एक दूसरे के साथ समन्वयित रखा जाएगा, जो परियोजनाओं को कसकर जुड़े हुए हैं, जो असली जीवन बचतकर्ता हो सकती है। हालांकि, यह इस के ऊपर के उत्तरों में उल्लिखित मुद्दों को भी बनाता है।

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

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

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