2013-01-21 16 views
6

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

इसलिए, यह इस तरह से कुछ समय लगेगा:

  • एक संस्करण 1 एस संस्करण 1
  • बी संस्करण 1 एस संस्करण 1
  • एक संस्करण 2 एस संस्करण का उपयोग करता का उपयोग करता है का उपयोग करता है 2
  • बी संस्करण 2 एस संस्करण 2

गिट (और/या कुछ उपकरण जो गिट का उपयोग करते हैं) के साथ इसे संभालने का सबसे अच्छा तरीका क्या है?

यहाँ मेरी चिंताएं हैं:

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

जैसा कि मैं समझता हूं कि कैनोलिक उत्तरों में से एक है "git submodule का उपयोग करें"। हालांकि, मैंने इस दृष्टिकोण के बारे में कुछ criticism पढ़ा है। मुझे लगा जैसे यह साझा पुस्तकालयों के लिए अधिक डिज़ाइन किया गया था जो शायद ही कभी बदलते हैं।

एक और दृष्टिकोण जो मैं git subtree

उपयोग कर रहा था पढ़ा और वहाँ कम लोकप्रिय तरीकों में से जोड़ी हैं: Repo, GitSlave

क्या सबसे अच्छा तरीका कोड साझा करने के इस प्रकार संभाल करने के लिए हो सकता है?

+0

लिंक अच्छे नहीं हैं, मैंने सबट्री तय की है लेकिन अन्य अनुमान नहीं लगा सकते हैं (गिट सबमिशन और आलोचना का उपयोग करें) – CharlesB

+0

धन्यवाद। मैंने एक को छोड़कर सभी लिंक तय किए। अगर मैं इसे सम्मिलित करता हूं, किसी कारण से यह गलत लिंक से जुड़ा हुआ है। –

+0

आप इसे सीधे मार्कडाउन कोड – CharlesB

उत्तर

3

तीन भंडारों का उपयोग करना एक बहुत ही सरल समाधान होगा: ए, बी, और एस। परियोजना भंडार ए और बी के पास उनके मेकफ़ाइल में एक जांच होगी ताकि यह सत्यापित किया जा सके कि डेवलपर भंडार में धक्का दिया गया नवीनतम कोड उपयोग कर रहा है, जैसे

check: 
     git fetch /path/to/S master:tip 
     git branch --contains tip | grep -q master 

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

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