मैं सबसे अच्छा संभाल और संस्करण नियंत्रण परियोजनाओं के लिए कुछ सलाह प्राप्त करना चाहता हूं, जो निम्नलिखित संरचना प्रदर्शित करता है:

एक मूल परियोजना (कई परियोजनाओं के बीच साझा) से, मुझे एक दी गई निर्देशिका संरचना और फाइलें प्राप्त करने की आवश्यकता है, अर्थात।

.
|-- modules/
|    |-- file_1_parent.py
|
|-- controllers/
     |-- file_2_parent.py

इस मूल परियोजना से, कई बच्चों के आश्रित व्युत्पन्न होते हैं, जो निर्देशिकाओं में फ़ाइलें जोड़ते हैं।

तब स्थिति निम्न की तरह दिख सकती है (उन परियोजनाओं का नाम जिनसे फ़ाइलें/निर्देशिकाएँ संबंधित हैं, कोष्ठक में हैं)

.
|-- modules/                  (parent project)
|    |-- file_1_parent.py     (parent project)
|    |-- file_1_child.py      (child project)
|
|-- controllers/              (parent project)
     |-- file_2_parent.py     (parent project)
     |-- file_2_child.py      (child project)

ठोस होने के लिए, मेरे मामले में मूल परियोजना web2py/django परियोजना है, जिससे मैं कई उपप्रोजेक्ट प्राप्त करना चाहता हूं।

सवाल अब है,

  • प्रत्येक प्रोजेक्ट को संस्करण कैसे नियंत्रित करें?
  • क्या मेरे पास माता-पिता और बाल परियोजनाओं के लिए अलग-अलग भंडार होना चाहिए?
  • क्या मुझे कुछ मूल परियोजना को किसी प्रकार के पैकेज/लाइब्रेरी के रूप में मानना ​​​​चाहिए?

मैंने निम्नलिखित दृष्टिकोणों के बारे में सोचा:

  • git submodule या git subtrees का उपयोग करना: यह काम नहीं करता है क्योंकि मुझे मूल परियोजना से बहुत कठोर निर्देशिका और फ़ाइल संरचना की आवश्यकता है
  • स्थानीय प्रोजेक्ट में कई git remotes, यानी दो git origins, एक पैरेंट के लिए और दूसरा चाइल्ड प्रोजेक्ट के लिए: इस समाधान के खिलाफ जो बोलता है, वह यह है कि प्रोजेक्ट को कहीं तैनात करने के लिए, मैं बस बस नहीं कर सकता git clone चलाएं लेकिन मैन्युअल रूप से एकाधिक git remote -v origin सेट करना होगा।
  • मूल परियोजना को एक पुस्तकालय के रूप में मानते हुए, जिसे मैं एक पैकेट प्रबंधक के माध्यम से स्थापित करता हूं, और फिर या तो बच्चों के भंडार के भीतर स्थापित फाइलों को संस्करणित करता हूं या उन्हें .gitignore में डालता हूं: शायद एक समाधान नहीं, जो इतना बुरा नहीं है, लेकिन मैं इसे पूरा करने के लिए एक उपकरण नहीं जानते। हो सकता है कि कोई उपकरण मौजूद हो जो किसी दिए गए संस्करण को github रेपो से some_paket_manager install path/to/git/repo==v.0.0.9 जैसे कुछ कमांड के माध्यम से स्थापित कर सकता है
  • मूल परियोजना से फ़ाइलों की प्रतिलिपि बनाएँ और चिपकाएँ: मैं उस मैन्युअल कार्य से बचने की कोशिश कर रहा हूँ।
1
physicus 16 फरवरी 2019, 00:50

1 उत्तर

सबसे बढ़िया उत्तर

बस साधारण विलय करें, केवल एक चीज जो आपको याद रखनी है, वह यह है कि जब/यदि आप बाल-परियोजना-विशिष्ट फ़ाइलों को हटाने और मर्ज परिणाम से परिवर्तनों को हटाने के लिए बाल शाखा पर माता-पिता की फाइलों पर काम वापस विलय करते हैं। गिट चीजों को तब तक सीधा रखता है जब तक आप रिकॉर्ड करते हैं कि आप वास्तव में क्या कर रहे हैं। git diff --diff-filter=A --name-only @ आपको उड़ान के दौरान जोड़ी गई सभी फ़ाइलें दिखाएगा, उदा. नो-प्रतिबद्ध विलय द्वारा लाया गया कुछ भी, इसलिए नो-प्रतिबद्ध विलय करें, केवल अपने इच्छित परिवर्तनों को शामिल करने के लिए परिणामों को ठीक करें, प्रतिबद्ध करें, किया। एक बार जब आपको यह पता चल जाता है कि फिक्सअप को क्या करने की आवश्यकता है, तो आप इसमें से बहुत कुछ स्वचालित कर सकते हैं, लेकिन यह हमेशा हर नई फ़ाइल को हटाना नहीं होगा।

1
jthill 15 फरवरी 2019, 23:05