2015-11-12 8 views
9

ठीक है, इसलिए मुझे पता चल रहा है कि क्या जीआईटी आने वाली समस्या के लिए समाधान होगा या नहीं। (आसानी से ट्रंक क्लीन, और केवल फीचर पूर्ण किए गए मुद्दों (फीचर, हॉटफिक्स, बगफिक्स इत्यादि) को बनाए रखते हुए फीचर शाखाएं, हॉटफिक्स शाखाएं, बगफिक्स शाखाएं बनाना। ताकि एक बार रिलीज करने की आवश्यकता हो तो कोई आधे पूर्ण/प्रतिबद्ध मुद्दे जारी नहीं किए जाएंगेएसवीएन से जीआईटी में स्थानांतरित करना, साझा भंडारों के साथ एसवीएन से जीआईटी में वर्कफ़्लो परिवर्तनों को मर्ज करें

पहले हम एसवीएन का उपयोग कर रहे थे, जिसमें गिट-फ्लो/ब्रांचिंग मॉडल के एक संशोधित संस्करण के साथ यहां दिखाया गया है: http://nvie.com/img/[email protected] जहां गिट-मास्टर हमारा svn-trunk है। यह काम-ईश है, लेकिन एसवीएन के साथ थोड़ा बोझिल है । विशेष रूप से, क्योंकि हम दो साझा खजाने का उपयोग करें।

और यहाँ आता है समस्या। पहले हम बाहरी के रूप में उन दोनों साझा खजाने का इस्तेमाल किया है, और सभी बाहरी संदर्भ lib/a/branches/develop और lib/b/branches/develop की ओर इशारा कर रहे थे। यह वाई काम करने के लिए बोझिल था वें अगर एक फीचर/हॉटफिक्स/बगफिक्स ब्रंच की आवश्यकता होती है क्योंकि इसे तीन शाखाएं बनाने, नए प्रोजेक्ट के साथ सुपर-प्रोजेक्ट को संशोधित करने और फिर परिवर्तनों को करने की आवश्यकता होती है।

कुछ सावधानीपूर्वक टंकण करने के बाद हमने पुस्तकालय भंडारों की शाखाओं का उपयोग करने के लिए स्विच किया। (इसलिए, superProject/lib/alib/a/branches/develop से एक शाखा है) और भविष्य के अपडेट (दोनों तरीकों) को superProject/lib/a से lib/a/branches/develop या वीजा बनाम में विलय की आवश्यकता होगी।

हालांकि यह रिलीज होने के बाद भी आधे पूर्ण कामों की हमारी समस्या का समाधान नहीं हुआ। (और दुख की बात है, जिस कंपनी में मैं काम करता हूं उसमें एक घंटे में आवश्यकता हो सकती है)। इसलिए हमने थोड़ा और सोचा और एटलसियन द्वारा प्रदान किए गए टूल का उपयोग करने की कोशिश करना शुरू करने के लिए सहमत हो गया, इस प्रकार बिट्टबकेट (पहले क्रूसिबल/फिशईई का उपयोग करके) का प्रयास कर रहा था और गिट के लिए अपने विशेष एकीकृत वर्कफ़्लो का उपयोग कर रहा था, जहां प्रत्येक मुद्दे के लिए शाखा हो सकती है बनाया गया और एक बार पुल अनुरोध पूरा हो जाने के बाद बनाया जा सकता है ताकि हमारे रिलीज मैनेजर क्या नियंत्रित हो और अगली रिलीज में क्या न जाए। /develop/ में कोई और आधा बेक्ड समस्या नहीं है क्योंकि सभी मुद्दों का उपयोग वर्कफ़्लो का उपयोग करके किया जाएगा।

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

क्या भी मुझे परेशान कर रहा है अच्छा नहीं, मैं क्या मिल सकता है, के बारे में जानकारी है कि है जो भंडार/शाखा Git-सबट्री बनाया गया था और तथ्य यह है कि दूरदराज के Git रिपोजिटरी से एक क्लोन नहीं स्वचालित रूप से करता है से किसी भी गिट-सबट्री के लिए सही रिमोट-लिंक शामिल करें। इस प्रकार अगर मैं wan't मेरे साथी डेवलपर्स के किसी भी उनके दूरस्थ मूल से Git-सबट्री अद्यतन करने के लिए सक्षम होने के लिए वे स्वयं एक git remote add -f libraryXXX http://repohere/lib-xxx.git (एक बार) क्या करना है और फिर कर git subtree pull --prefix locationGoesHere libraryXXX master (--squash optional)

यह सब इतना अधिक बोझिल लगता है आगे और पीछे विलय शाखाओं के साथ एसवीएन के लिए वर्कफ़्लो की तुलना में। क्या मैं कुछ भूल रहा हूँ? क्या मैं पुरानी जानकारी पढ़ रहा हूं? क्या मैं सिर्फ साझा भंडारों के साथ काम करने का सही तरीका नहीं देख रहा हूं?

संसाधनों मैं प्रयोग किया जाता में से कुछ:

उत्तर

3

यह मुश्किल है आपके द्वारा दिए गए विस्तृत विवरण के साथ भी, आपके सेटअप पर कई घोषणाएं करने के लिए पंथ। हालांकि, मैं कह सकता हूं कि आपको गिट में ब्रांचिंग व्यावहारिक रूप से दर्द रहित होने के लिए मिल जाएगी (विशेष रूप से जब svn की तुलना में)। मैं आपकी लाइब्रेरी निर्भरताओं के लिए submodules का उपयोग करने की सलाह देते हैं। वे सही नहीं हैं, लेकिन वे काम करते हैं। जब आप कोई शाखा बनाते हैं, तो वह शाखा पुस्तकालयों के समान संस्करण का उपयोग करके माता-पिता के रूप में शुरू हो जाएगी, और आप .gitmodules फ़ाइल को अलग-अलग उपयोग करने के लिए संपादित कर सकते हैं। आपको --recursive ध्वज के साथ एक नया क्लोन बनाने के लिए याद रखना होगा (या क्लोनिंग के बाद git submodule update का उपयोग करने के लिए), लेकिन यह सबट्रीज़ के मुकाबले कहीं अधिक आसान है।

+0

मैंने 'submodules' के बारे में कुछ पढ़ा है, लेकिन मैं उन सभी सूचनाओं से निष्कर्ष निकालने में सक्षम हूं कि वे 'svn: externals' के अनुरूप हैं जिनका हमने पहले उपयोग किया था और बुरी तरह से छुटकारा पाने के लिए चाहते थे । सरल कारण के लिए कि हम प्रत्येक "सुपर" प्रोजेक्ट को पुस्तकालयों की अपनी प्रतिलिपि बनाना चाहते हैं जिसे अन्य "सुपर" परियोजनाओं में बाधा डाले बिना संशोधित किया जा सकता है। यदि ऐसा नहीं है तो मैं थोड़ी अधिक सबमिड्यूल में देखूंगा। –

+0

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

+0

"हम प्रत्येक" सुपर "प्रोजेक्ट को पुस्तकालयों की अपनी प्रतिलिपि रखना चाहते हैं जिसे अन्य" सुपर "परियोजनाओं में बाधा डाले बिना संशोधित किया जा सकता है .. यह वही है जो सबमिड्यूल हैं। वे स्थानीय भंडार हैं। कोई वैश्विक स्थिति नहीं है, केवल वही भेजा जाता है जो भेजा जाता है। आप उनमें निजी शाखाएं बनाए रख सकते हैं, यह बहुत आम है। – jthill

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