टीएलडीआर; यह एक लंबी हवा वाली पोस्ट होने जा रहा है, लेकिन मुझे यकीन है कि आप में से कई एकता 3 डी डेवलपर्स भी उसी समस्या में चल रहे हैं। हमारी सामूहिक स्वच्छता को बचाने के लिए एक बार और सभी उत्तर के लिए एक स्पष्ट निश्चित आवश्यकता है।unity3d और गिट submodules यह संभव है?
तो मैं पिछले 2+ सालों से गिट का उपयोग कर रहा हूं लेकिन मैंने इसमें बहुत गहराई से डाला नहीं है। मैं बिटबकेट/गीथूब इत्यादि से पुश पुल को शाखा/विलय कर सकता हूं और यह नियमित जीत फॉर्म/पारंपरिक अनुप्रयोगों के लिए ठीक काम करता है।
यहां समस्या है। जब से लाइब्रेरी में संदर्भ जोड़ने के लिए आपको वास्तव में xna/silverlight से unity3d और एकता में स्थानांतरित किया गया है, तो आपको वास्तव में उस पुस्तकालय से स्रोत फ़ाइलों को अपनी एकता प्रोजेक्ट फ़ोल्डर में कॉपी करना होगा। यद्यपि एकता आपको * .dll फ़ाइलों को प्लगइन फ़ोल्डर में छोड़ने की अनुमति देती है, लेकिन स्पष्ट क्रॉस प्लेटफ़ॉर्म संगतता समस्याएं हैं, और इस प्रकार मैं वहां कभी नहीं जाना चाहता हूं।
मेरे पास एआई, सामग्री प्रबंधन, लॉगिंग, सारणित उपयोगकर्ता इनपुट सिस्टम इत्यादि से विभिन्न कार्यक्षमता प्रदान करने वाली एक दर्जन लाइब्रेरी परियोजनाएं हैं और मैं भविष्य के खेल के लिए एक नए स्तर के संपादक पर काम कर रहा हूं।
प्रत्येक व्यक्ति पुस्तकालय परियोजना यह आत्मएकता परियोजना और प्रत्येक परियोजना के लिए कोड फ़ाइलों के रूप में इस तरह के
Assets\<company name>\<project name>\
Assets\<company name>\<library name>\
Assets\<company name>\<another library name>\
मैं यह कर बातें अत्यधिक अन्य संपत्ति हैं कि के कई के विपरीत व्यवस्थित रखने के लिए एकता में आयोजन किया जाता है है एकता संपत्ति स्टोर पर। :(
तो मेरा स्तर संपादक परियोजना एकाधिक पुस्तकालय परियोजनाओं का उपयोग कर रही है जिसका कोड कॉपी पेस्ट के माध्यम से आयात किया गया है। इनमें से प्रत्येक पुस्तकालय स्वयं स्थानीय गिट भंडारों में होस्ट किए जाते हैं। इसलिए जब मैं पुस्तकालय से कोड फ़ाइलों को पेस्ट करता हूं परियोजनाओं मेरी मुख्य एकता परियोजना के लिए मैं अपने आप मुझे लगता है कि करने के लिए बनाने के परिवर्तन के लिए प्रतिबद्ध के लिए किसी भी क्षमता ढीला Git रेपो पुस्तकालय।
मैं इस पिछले साल क्या कर दिया है fallowing
- प्रारंभ एक मुख्य परियोजना किया गया है
Assets\<company name>\<main project name>\
- किसी भी आयात करें लाइब्रेरी प्रोजेक्ट्स (प्रतिलिपि/पेस्ट कोड फाइलें)
Assets\<company name>\<library name>\
- यदि मुझे पुस्तकालयों में से किसी एक में परिवर्तन करने की आवश्यकता है तो मैं आमतौर पर पुस्तकालय कोड फ़ाइल को संपादित करता हूं जो मुख्य परियोजना में हैं जिन पर मैं काम कर रहा हूं। (अन्यथा अधिक जटिलता उत्पन्न होती है)
- क्योंकि मुख्य प्रोजेक्ट भी एक गिट रेपो है जो मैं किसी भी लाइब्रेरी फ़ाइलों में किए गए परिवर्तनों को मुख्य परियोजना के रेपो के लिए भी प्रतिबद्ध करता हूं।
- थोड़ी देर बाद मैं पुस्तकालय के मूल स्थान के साथ
Assets\<company name>\<library name>\
की फ़ोल्डर तुलना करने के लिए CodeCompare (एक diff उपयोगिता) का उपयोग करता हूं, जहां मैंने पहले लाइब्रेरी फ़ाइलों की प्रतिलिपि बनाई थी। - मैं प्रत्येक बदली गई कोड फ़ाइल को diff द्वारा अलग-अलग तुलना करता हूं और लाइब्रेरी के मूल स्थान पर अपने मुख्य प्रोजेक्ट में किए गए परिवर्तनों को माइग्रेट करता हूं।
- अब यह किया गया है, लाइब्रेरी फिर से एक गिट रेपो है (दूसरी बार) मुझे कोड फ़ाइलों में किए गए विभिन्न परिवर्तनों के बारे में काम करना है।
उस पागलपन के साथ यहां एक और समस्या है। मुख्य परियोजना अभी एकमात्र मुख्य परियोजना नहीं है जो मेरे पास है। मेरे पास कुछ अन्य परियोजनाएं हैं जो इन अन्य पुस्तकालयों के सभी संदर्भ (कॉपी/पेस्ट के माध्यम से) हैं।तो अब जब मैंने पुस्तकालय के लिए कोड अपडेट किया है और इसे प्रतिबद्ध किया है, तो मुझे अब उन मुख्य परियोजनाओं के माध्यम से वापस जाना होगा जो लाइब्रेरी का उपयोग करते हैं और लाइब्रेरी गिट रेपो से उन मुख्य परियोजनाओं में परिवर्तनों पर प्रतिलिपि बनाते हैं।
कार्य प्रवाह summerized
MainProjectA-> कोड LibraryA- से नकल फ़ाइलें> LibraryA फ़ाइलें> MainProjectA- अंदर संशोधित LibraryA फ़ाइलें मूल LibraryA फ़ोल्डर में वापस diff तुलना के माध्यम से विलय कर दिया स्थान के> LibraryA कोड फ़ाइलों तो वापस करने के लिए की नकल की लाइब्रेरी आईई का उपयोग करने वाली अन्य परियोजनाएं: मेनप्रोजेक्ट बी, मेनप्रोजेक्टसी, मेनप्रोजेक्ट डी।
अच्छा भगवान! चूंकि मेरी विभिन्न परियोजनाएं बड़ी और बड़ी हो जाती हैं क्योंकि यह समस्या अधिक से अधिक हो जाती है। यह प्रणाली काम करती है लेकिन यह बहुत ही कठिन है।
इंटरमिशन
तो थोड़ा सा छोटा सा रेंट।/लेता है DeepBreath/sigh मैं गिट कमांड लाइन का उपयोग करने से इंकार कर दिया। यह एमएस-डॉस अला 1 9 80 के दशक के टूट गया। यह 20 मजाकिया 14 लोग हैं। 2014 और हम डेवलपर्स अभी भी कमांड लाइनों के साथ geeking कर रहे हैं। इस दिन और उम्र में, मैं और अधिक उम्मीद करता हूं। मैं मूल रूप से पूरी तरह से एक नई नई कमांड लाइन भाषा नहीं सीख रहा हूं, केवल विंडोज़ और ऐप्स के बीच चौथाई और चौथाई स्विच करना है, जैसे कि कोड बदलने के लिए मौलिक रूप से सरल कुछ करना। कुछ तेज़ माउस क्लिक के साथ पूरा किया जा सकता है और एक छोटा टाइप किया गया संदेश वह सब कुछ आवश्यक है। git = new hawtness + अनावश्यक कमांड लाइन जटिलता
यह कहकर कि मैं अक्सर काम करता हूं और बनाम/विलय आदि बनाने के लिए निर्मित बनाम 2014 की गिट सुविधाओं का उपयोग करता हूं लेकिन यह सबमिड्यूल का समर्थन नहीं करता है, जहां तक मैं कह सकता हूं । तो इसके लिए मैं SourceTree का उपयोग करता हूं।
एंड इंटरमिशन।
जैसा मैंने कहा कि मैं अभी तक Git का इस्तेमाल किया है नहीं यह परे एक बहुत बुनियादी मुख्य कार्यक्षमता है और मैं केवल परीक्षण परियोजनाओं के माध्यम से प्रारंभिक परीक्षण किया है, लेकिन मैं Git मज़बूती से जिस तरह से काम करने के लिए नहीं मिल सकता है Git submodule नरक
दर्ज मुझे पनडुब्बियों के साथ काम करते समय अक्सर और इसकी आवश्यकता होती है, वहां कुछ भ्रम होता है, और अक्सर कई त्रुटियों के कारण यह नहीं प्रतिबद्ध होगा।
मुझे क्या करना चाहते हैं तो इस
- MainProjectA बुलाया नई एकता परियोजना बनाएँ और यह एक स्थानीय रेपो
- LibraryA (स्थानीय रेपो), LibraryB से MainProjectA को Git submodule (रों) जोड़े बनाने के (स्थानीय है रेपो) आदि
- यदि मैं मेनप्रोजेक्ट के अंदर लाइब्रेरी से संबंधित कोड फ़ाइलों में परिवर्तन करता हूं, तो मैं उन विशिष्ट परिवर्तनों को लाइब्रेरी के रेपो में मेनप्रोजेक्ट के भीतर से वापस करने की क्षमता चाहता हूं।
मैं अब तक एक उपयोगिता लिखना शुरू कर चुका हूं जो फ़ाइलों को स्वचालित रूप से दो अलग-अलग फ़ोल्डरों के बीच सिंक करेगा जैसे ही यह परिवर्तन का पता लगाता है। लेकिन मैंने इसे छोड़ दिया क्योंकि यद्यपि यह सिंक्रनाइज़ेशन के मुद्दों को हल करेगा, यह गिट प्रतिबद्ध मुद्दों को हल नहीं करेगा।
एक अन्य समस्याहै कि मेरे सभी मौजूदा एकता परियोजनाओं एक स्थानीय रेपो है कि सेटअप के रूप में fallows
<Unity Main Project Folder>
|- .git
|- Assets
|-Company Name
|- MainProjectA
|- Library
|- ProjectSettings
|- .gitignore
<Unity LibraryA Folder>
|- .git
|- Assets
|-Company Name
|- LibraryA
|- Library
|- ProjectSettings
|- .gitignore
मुझे क्या करना चाहते हैं अपने मुख्य परियोजना में एक LibraryA फ़ोल्डर मेरी LibraryA की एक submodule है कि राशि है परियोजना, अधिक विशेष रूप से मैं केवल <Unity LibraryA Folder>\Assets\Company Name\LibraryA\
की सामग्री को अपने मुख्य परियोजना फ़ोल्डर में एक submodule के रूप में शामिल होना चाहते हैं <Unity Main Project Folder>\Assets\Company Name\LibraryA\
<Unity Main Project Folder>
|- .git
|- Assets
|-Company Name
|- MainProjectA
|- LibraryA (submodule)
|- Library
|- ProjectSettings
|- .gitignore
लेकिन SourceTree/Git शिकायत है कि मैं एक मौजूदा रेपो fol करने के लिए एक submodule नहीं जोड़ सकते डेर। <Unity Main Project Folder>\Assets\Company Name\
मैं लेखन जारी रखने जा रहा था लेकिन ... हाँ मुझे लगता है कि यह पर्याप्त लेखन है, और मेरे लक्ष्य को अभी तक पर्याप्त रूप से वर्णित किया जाना चाहिए।
निष्कर्ष
मुझे लगता है कि मैं भी मौसम Git पूछ सकते एक उत्पाद है कि यह भी मुझे कि मैं क्या करने की कोशिश कर रहा हूँ करने की अनुमति देगा के रूप में काफी परिपक्व हो गया है? या क्या यह संभव है कि गिट की वास्तुकला को मैं जो करने की कोशिश कर रहा हूं उसका समर्थन करने के लिए संभव नहीं है?
प्रत्येक खोज खाली हो गई है, यूट्यूब कोई मदद नहीं है और समय की बर्बादी है, मुझे हर उदाहरण का उल्लेख नहीं करना है, जो कमांड लाइन उदाहरण है, और submodules पर स्पर्श नहीं करता है।
एक सामान्य विंडोज़ अनुप्रयोग में submodules एक समस्या नहीं होगी। समस्या विशेष रूप से इस परियोजना में सभी कोड फ़ाइलों को कैसे पसंद करती है, इस बारे में समस्या है। मैं और कैसे मैं अपनी संगठित फ़ोल्डर संरचना को बरकरार रखने की कोशिश कर रहा हूं।
कृपया मदद करें। कृप्या। कृपया पर्ड करें। मैं तुमसे हाथ जोड़ कर प्रार्थना करता हूं! मैं तुमसे हाथ जोड़ कर प्रार्थना करता हूं! मेरे फ्रिकिन केन पर बेगिंग! : पी
सबमोड्यूल बुराई हैं। इसे गूगल पर देखें। आप अपने पुस्तकालयों के लिए डीएलएस क्यों नहीं बनाते हैं और संस्करणों को प्रबंधित करने और डीएलएस डाउनलोड करने के लिए NuGet की तरह कुछ उपयोग करते हैं? आप संकलन समय में भी लाभ प्राप्त करेंगे क्योंकि यूनिटी को आपके द्वारा फ़ाइल को सहेजने के दौरान हर चीज को संकलित करने की आवश्यकता नहीं होगी (वैसे, आपको लंबे संकलन के समय से बचने के लिए डीएल की आवश्यकता नहीं है, आप कोड को डालकर इससे बच सकते हैं प्लगइन्स फ़ोल्डर: \ संपत्ति \ प्लगइन्स \ ...) –
Roberto
मैं अधिकांश यूनिटी परियोजनाओं के लिए PureMVC के सी # पोर्ट का उपयोग करता हूं। यह एक डीएलएल के रूप में आता है और आईओएस, एंड्रॉइड, मैक और विंडो के लिए परियोजनाओं के साथ ठीक काम किया है। अन्यथा यूनिटीपेकेज आयात/निर्यात तंत्र का उपयोग क्यों न करें? एसेट्स स्टोर से सभी प्लगइन्स इसका उपयोग अपनी सामग्री वितरित करने के लिए करते हैं। मैं इसे एक परियोजना से अगले परियोजना में स्थानांतरित करने के लिए उपयोग करता हूं और ऐसा लगता है कि यह ठीक काम करता है। –
यह मेरे पसंदीदा स्टैक ओवरफ्लो प्रश्न की तरह है! अच्छी तरह से व्यक्त और सचित्र, और वास्तव में मैं भी क्या कर रहा हूँ। क्या आपने इस मुद्दे के बारे में कोई नया समाधान पाया है या इस मुद्दे के बारे में अन्य अंतर्दृष्टि प्राप्त की है क्योंकि आपने दो साल पहले पोस्ट किया था? – Junuxx