2010-09-16 15 views
10

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

master 
    - java 
    - python 
    - ruby 

मैं एक Git-रेपो इस्तेमाल कर सकते हैं इतिहास को संरक्षित करने आदेश गठबंधन , तो यह कोई मुद्दा नहीं है। मैं इसके बारे में सबसे अच्छा अभ्यास के रूप में उत्सुक था।

उत्तर

5

मेरे पास Mercurial के साथ एक ही प्रश्न था, और एक एल्गोरिदम (COBS) कि मैं C और Python में लागू करना चाहता था।

अंततः मैं इसे अलग खजाने में विभाजित करने के लिए (भले ही अजगर कार्यान्वयन शामिल एक सी विस्तार है जो सादा सी कार्यान्वयन के समान कोड था) का फैसला किया। मेरा तर्क नीचे आया:

  • मैं कार्यान्वयन के स्वतंत्र संस्करण संख्या और स्वतंत्र रिलीज चाहता था।
    • git describe नवीनतम एनोटेटेड टैग के आधार पर एक संस्करण की पहचान करने के लिए एक अच्छी सुविधा है। भंडार में केवल एक कार्यान्वयन के साथ, git describe उपयोग सरल है। लेकिन अगर अलग संस्करण संख्याओं के साथ विभिन्न कार्यान्वयन एक भंडार में कर रहे हैं, तो git describe उपयोग और अधिक जटिल हो जाता है --match विकल्प के उपयोग की आवश्यकता होगी, दिए गए उपसर्ग के साथ टैग करने के लिए सीमित करने के लिए। जैसे git describe --match "python*"
  • तरह से अजगर मॉड्यूल आम तौर पर आयोजन किया जाता है (Python module packaging best-practices), यह मेरे लिए अधिक भावना बनाया अजगर कार्यान्वयन अलग और आत्म निहित रखने के लिए।
  • और सभी समान हैं, मैं और अधिक सुक्ष्म प्रतिरूपकता के पक्ष में जाते हैं।
+0

मैंने गिट रेपो के संबंध में बढ़िया मॉड्यूलरिटी सुना है, और यह समझ में आता है। मैं जल्द ही अपने निजी रिपोज़ को जिथब पर धक्का दे रहा हूं, इसलिए यदि कोई अस्तित्व में है, तो मैं सर्वोत्तम अभ्यास का पालन करना चाहता हूं। – argoneus

2

यह एक मुश्किल फोन है। संभवतः "सर्वश्रेष्ठ" क्या है, व्यक्तिगत प्राथमिकता और/या परिस्थितियों के विनिर्देशों को उबाल लेंगे।

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

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

फिर, यह एक कठिन कॉल है। मुझे नहीं लगता कि वहां जाने के लिए एक स्पष्ट, कठोर और तेज़ नियम है।

+0

इनपुट के लिए धन्यवाद, दान। आप कुछ अच्छे अंक बनाते हैं, विशेष रूप से सभी भाषा कार्यान्वयन में एल्गोरिदम के समान पहलू को बदलने के संबंध में। मैं सहमत हूं - यह एक कठिन कॉल है, और जो मैंने एकत्र किया है, वहां से एक निश्चित सर्वोत्तम अभ्यास नहीं है। – argoneus

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