2009-07-31 12 views
10

मैं इस विचार पर कुछ फीडबैक प्राप्त करना चाहता हूं, क्योंकि मैं प्रत्येक दृष्टिकोण के पेशेवरों और विपक्ष को देख सकता हूं। जावा डेवलपर के रूप में, यह कोड भंडार में जार फ़ाइलों को संग्रहीत करने के बारे में होगा, लेकिन यह आसानी से अन्य संकलित भाषाओं तक विस्तारित हो सकता है।क्या आप एक स्रोत कोड भंडार में बनाता है?

सकारात्मक:

  • आसानी से तारीख उपकरण पुन: संयोजित करने के लिए से बाहर (potientially अब उपलब्ध नहीं) पर निर्भर करती है की आवश्यकता के बिना, पिछले वितरण पुनः प्राप्त कर सकते हैं।

विपक्ष:

  • जल्दी से किया जा सका "ब्लोट" कोड भंडार, आवृत्ति के बनाता है पर निर्भर करता है।
+1

हां, निश्चित रूप से आपके भंडार को फहराएगा। आईएमओ, स्रोत भंडार सिर्फ यही है - किसी भी प्रकार के ** स्रोत ** के लिए, लेकिन अंत में निर्माण के आउटपुट के लिए ** ** ** नहीं। लेकिन यह सिर्फ मेरी राय है –

उत्तर

20

हम निर्देशिका संरचना में रिलीज संग्रहित करते हैं, और स्रोत नियंत्रण में उचित संस्करणों को टैग करते हैं। यह हमें निर्मित संस्करणों और स्रोत उत्पन्न करने वाले स्रोत तक पहुंच प्रदान करता है।

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

+1

+1 - हाँ, यही वह है जो हम करते हैं। पूर्ण रिलीज बनाता है कि सभी परीक्षणों को पारित किया गया है और डिस्क को –

+1

+1 पर एक शेयर में "रिलीज सर्वर" पर हमारे निरंतर एकीकरण बिल्ड सर्वर द्वारा संग्रहीत किया जाता है, अक्सर, केवल एक ही आउटपुट जिसे रखने की आवश्यकता होती है वे वास्तव में रिलीज़ की जाती हैं। दूसरों को कुछ हफ्तों तक आयोजित किया जा सकता है, लेकिन फिर कमरे बनाने के लिए हटा दिया जाता है, क्योंकि उन्हें हमेशा पुनर्निर्मित किया जा सकता है। किसी भी तरह से, आउटपुट स्रोत नियंत्रण में नहीं हैं। –

+0

+1 यह सबसे अधिक समझ में आता है। स्रोत नियंत्रण "सिद्धांत में" निर्माण को फिर से बनाने में सक्षम होना चाहिए, लेकिन यदि उपकरण बदलते हैं तो वास्तविक बाइनरी के साथ समांतर स्थान होने का अर्थ होता है। –

4

समझौता: संग्रह उपकरण और टैग निर्माण में स्टोर टूल्स और स्रोत कोड। इस तरह आप हमेशा किसी भी उत्पाद के निर्माण को फिर से बना सकते हैं।

और आपके पास संकलित कलाकृतियों के लिए हमेशा एक अलग भंडार हो सकता है।

+1

मुझे लगता है कि यह एक अच्छा समझौता है। हालांकि मैं भविष्य में कुछ समय में पुराने उपकरणों के बारे में भी थोड़ा उलझन में नहीं हूं। –

+0

@ जिन किम: मान लीजिए कि आप रिलीज को एफ़टीपी सर्वर या समकक्ष पर भी रखते हैं, इससे आपको चिंता नहीं होनी चाहिए। –

0

भंडार में विशिष्ट ग्राहक रिलीज रखें।
सिद्धांत रूप में यह आवश्यक नहीं है क्योंकि हम हमेशा उस संस्करण को पुन: पेश कर सकते हैं, लेकिन यह निश्चित है कि किसी निश्चित ग्राहक को सटीक। एमएसआई प्राप्त करने में सक्षम होना अच्छा हो - हम फिर एक स्वच्छ वीएम में परीक्षण करते हैं।

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

+1

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

+0

क्या आप उम्मीद करते हैं कि एक पुनर्निर्मित एमएसआई किसी भी तरह से अलग होगा? मेरा मतलब कार्यात्मक रूप से नहीं है, लेकिन बिट-बिट-बिट स्तर पर। –

0

मुझे लगता है कि संस्करण नियंत्रण प्रणाली में निर्माण आउटपुट को स्टोर करना उचित है। दोनों विकास के कुछ विशिष्ट संस्करणों का परीक्षण करने के लिए और कुछ विकास कार्यों को कम करने के लिए भी।

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

+0

मुझे आउटपुट के साथ स्रोत नियंत्रण प्रणाली को छेड़छाड़ करने का कोई लाभ नहीं दिखता है। –

+0

यह आपके पर्यावरण और टीम के आकार पर बहुत निर्भर करता है। जटिल टूलींग के साथ बड़ी परियोजनाओं में, स्क्रैच से सबकुछ संकलित करना क्योंकि आपको कुछ घटक के कुछ संस्करण की आवश्यकता है हमेशा संभव नहीं है। अपना निर्णय लें – VoidPointer

1

हम किसी भी निर्माण के लिए भंडार लेबलिंग के लिए जाते हैं ताकि हम किसी भी बिल्ड नंबर & के लिए वास्तविक स्रोत प्राप्त कर सकें, फिर हम वास्तव में तैनात वास्तविक प्रकाशित बिल्ड फ़ाइलों को ज़िप और अपलोड कर सकते हैं - बस यह सुनिश्चित करने के लिए कि कोई आखिरी मिनट कॉन्फ़िगर नहीं है तैनाती के दौरान tweaks आदि जो ट्रंक में खुद को प्रतिबिंबित नहीं हैं।

4

यदि आप एक अच्छी पर्याप्त बिल्ड सिस्टम बना सकते हैं कि कोड के चेकआउट के साथ सटीक निर्माण को फिर से बनाने के लिए यह छोटा है, तो मुझे विश्वास नहीं है कि आपके निर्माण को भंडार में स्टोर करने की आवश्यकता है।

मेरी अधिकांश सामग्री के लिए मैं अपने कोड के विशिष्ट निर्माण को स्टोर नहीं करता हूं, लेकिन मैं पुस्तकालयों के विशिष्ट संस्करणों को स्टोर करता हूं जो मेरा कोड निर्भर करता है।मैंने कुछ महीनों पहले एक टैग में लोड करने के लिए तुच्छ बनाने और "चींटी" टाइप करने के लिए बहुत मेहनत की और पेड़ के बाहर किसी भी चीज पर भरोसा किए बिना सब कुछ ठीक से बनाता है। (सही जावैक और चींटी को छोड़कर)

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

+0

+1। कुछ भी जो अन्य इनपुट से निर्माण प्रक्रिया में नहीं बनाया जा सकता है, उसे स्वयं इनपुट माना जाना चाहिए। तो तीसरे पक्ष के पुस्तकालयों, या यहां तक ​​कि विरासत वाले लोगों की जांच करना ठीक है जिनके निर्माण को स्वचालित नहीं किया जा सकता है। –

0

कभी-कभी। अधिकांश समय उत्तर नहीं है लेकिन अभी भी परिदृश्य हैं जहां यह समझ में आता है, ऐसा करें।

एक तरफ के रूप में, मुझे आश्चर्य है कि यह अभी भी खुला है। इन चर्चा प्रकार के प्रश्न आमतौर पर 5 मिनट से भी कम समय में बंद होते हैं।

+1

समापन नाज़ी किसी अन्य समय क्षेत्र में होना चाहिए और अभी भी सोना चाहिए। –

+1

यह कुछ व्यक्तिपरक मामले की अस्पष्ट चर्चा नहीं है, यह सर्वोत्तम प्रथाओं का मुद्दा है। उदाहरण के लिए –

2

मुझे नहीं लगता कि वास्तविक निर्माण के संस्करण का एक अच्छा कारण है। स्रोत संस्करण को टैग करें और इसे बनाएं ताकि टैग को बदलने के लिए केवल एक नियंत्रित समूह तक पहुंच हो। एक बिल्ड टैग में कभी भी चेकइन नहीं होना चाहिए, इसलिए निर्माण को फिर से बनाने के लिए यह छोटा होना चाहिए।

3

मैं सर्वर में किसी फ़ोल्डर पर बिल्ड स्टोर करता हूं, और उनका नियमित आधार पर बैक अप लिया जाता है। लेकिन मैं उस संशोधन को टैग करता हूं जो उस निर्माण का प्रतिनिधित्व करता है। बिल्ड फ़ोल्डर में मैं न केवल निष्पादन योग्य, द्विआधारी या पृष्ठ (हमारा केस एएसपी.Net) स्टोर करता हूं, बल्कि एसक्यूएल डेल्टा से प्राप्त परिवर्तन स्क्रिप्ट भी संग्रहीत करता है।

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

+0

+1। –

0

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

-1

मुझे लगता है कि स्रोतों, निर्भरता, बाइनरी और निर्माण उपकरण एक साथ संस्करणीकृत किया जाना चाहिए ... यह वही है बड़ा परियोजनाओं जहां अंतिम रिलीज कई स्रोत परियोजनाओं से आता है के साथ चल रहा है पर नज़र रखने के लिए एक ही रास्ता है ...

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