तर्क SCMs में जाँच बाइनरी फ़ाइलों को फिर से


10

मैं एक कंपनी के लिए काम करता हूं जो प्राथमिक रूप से जावा अनुप्रयोगों का निर्माण करता है और मैं SCM को चेक-इन बाइनरी फ़ाइलों (निर्भरता और अंतिम उत्पादों) को रोकने के लिए हर किसी को समझाने की कोशिश कर रहा हूं।

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

संपादित करें: ठीक है, यह उन फ़ाइलों के बीच एक अंतर बनाने के लिए समझ में आता है जो निर्भरता और उत्पन्न फ़ाइलों की तरह लगभग नहीं बदलते हैं। फिर भी, मैं बाद के खिलाफ कारणों में दिलचस्पी रखता हूं।

जवाबों:


7

संग्रहण स्थान सस्ता है, और इसलिए आपको फ़ाइलों की जांच करनी चाहिए या नहीं करनी चाहिए, इसके लिए बहुत ठोस तर्क नहीं है।

इसके बजाय, आप SCM के उद्देश्य से अपील कर सकते हैं। SCM द्वारा ट्रैक की गई प्रत्येक फ़ाइल समानांतर, जो आपकी टीम कर रही है, वितरित परिवर्तनों को प्रबंधित करने की आवश्यकता का प्रतिनिधित्व करती है। जब तक कि टीम के दो सदस्य एक ही फाइल को बदलने की कोशिश नहीं करते, तब तक यह स्पष्ट नहीं है। उन परिवर्तनों को हल करना जो SCM वास्तव में है, एक और देव के काम के आकस्मिक अधिलेखित को रोकना, और उम्मीद है, उन परिवर्तनों को मर्ज करने की प्रक्रिया को स्वचालित करना।

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

इसका मतलब है कि यह द्विआधारी फ़ाइल को हाथ से मर्ज करने के लिए देव के ऊपर है, और फिर SCM को बताएं कि फ़ाइल को मर्ज कर दिया गया है। चूंकि यह एक देवता कर रहा है, मर्ज वास्तव में दोनों पूर्व चेक-इन के सभी परिवर्तनों को कवर नहीं कर सकता है, और चूंकि फ़ाइल द्विआधारी है, मर्ज को सत्यापित करने का कोई स्वचालित तरीका नहीं है।

द्विआधारी प्रारूपों के लिए जो वास्तव में परियोजना स्रोतों का प्रतिनिधित्व करते हैं, जैसे कि कला संपत्ति, यह एक दुर्भाग्यपूर्ण, लेकिन नेकसेरी कदम है। हालाँकि, बिल्ड आउटपुट स्रोत नहीं हैं। उन्हें मर्ज करने की कोई आवश्यकता नहीं है, क्योंकि स्रोतों को मर्ज किया जा सकता है और परिणामस्वरूप निर्मित आउटपुट को फिर से बनाया जा सकता है। इन परिवर्तनों को ट्रैक करना और प्रबंधित करना 100% बेकार है। यह SCM के संसाधनों को बर्बाद करता है, हालांकि बहुत अधिक नहीं है, लेकिन यह विकासकर्ता समय बर्बाद कर देता है जो शानदार विलय विफलताओं से गुजर रहा है। डेवलपर का समय बहुत महंगा है, और जो कुछ भी इसे बर्बाद करता है वह एक कैंसर है।

दूसरी ओर, एक विशेष मामला है जहां बिल्ड आउटपुट को संग्रहीत किया जाना चाहिए। परियोजना का कोई भी संस्करण जिसे कभी भी भेज दिया गया है या तैनात किया गया है, उसे संभवतः अनिश्चित काल तक बनाए रखा जाना चाहिए। वास्तविक बिल्ड की बाइट प्रतिलिपि के लिए एक सटीक, बाइट होने के साथ, जो ग्राहक के पास समस्याएँ हैं, वह उस ग्राहक का समर्थन करना आसान बना सकता है, क्योंकि आपके पास उसके पास सटीक संस्करण होगा।

वह बैकअप शायद स्रोत कोड के समान रिपॉजिटरी में नहीं होना चाहिए, क्योंकि वे आम तौर पर अलग-अलग शेड्यूल का पालन करेंगे और मूल रूप से अलग-अलग संरचनाएं होंगी।


10

निर्भरता, यहां तक ​​कि द्विआधारी रूप में भी जांच की जानी चाहिए, ताकि जब कोई और परियोजना को नीचे खींचता है, तो यह काम करता है। मुख्य चिंता फ़ाइल का प्रकार नहीं है, लेकिन फ़ाइल कैसे बनाई जाती है। मेरे द्वारा उपयोग किए जाने वाले अंगूठे का नियम यह है कि यदि इसे किसी अन्य फ़ाइल का उपयोग करके उत्पन्न किया जा सकता है, तो यह चेक इन नहीं होता है - इसका मतलब है कि स्वचालित रूप से उत्पन्न प्रलेखन, बाइनरी फ़ाइलें जो मैं बनाता हूं, और इसी तरह।


2

SCM का उपयोग करने के प्राथमिक लाभों में से एक यह है कि आप अतीत में कभी भी अपने सिस्टम को फिर से बना सकते हैं। तो इसका कोई मतलब नहीं है कि आप अपने SCM में अपना अंतिम निर्माण कर रहे हैं क्योंकि आप केवल संशोधन संख्या की जांच कर सकते हैं और इसका निर्माण कर सकते हैं।

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

लगभग कोई भी ऐसा नहीं करता है।


ठीक है, मैं सहमत हूं: निर्भरता शायद ही कभी बदलती है। लेकिन स्रोत कोड की एक पंक्ति के साथ 20Mb WAR फ़ाइल चेक-इन के योग्य नहीं है।
ither

3
क्यों नहीं? क्या आप डिस्क स्थान से बाहर जाने वाले हैं? यदि आपके पास स्रोत नहीं है और यह एक आवश्यक निर्भरता है, तो आपके पास कोई विकल्प नहीं है, यदि आप ऐसा करते हैं, तो यह एक द्विआधारी के रूप में नहीं गिना जाता है और आप इसे ज़रूरत पड़ने पर बना सकते हैं।
हेनरी

0

स्रोत और ऑब्जेक्ट फ़ाइलों (स्रोत फ़ाइलें स्पष्ट रूप से आवश्यक हैं) दोनों को शामिल करने के लिए अनावश्यक लगता है। सिर्फ अनावश्यक होने के अलावा, ऑब्जेक्ट फ़ाइलें बहुत अधिक स्थान ले सकती हैं। यदि आपकी फर्म वितरित SCM (Git, Hg, Bzr) का उपयोग कर रही है, तो उन बाइनरी फ़ाइलों को सभी डेवलपर्स के बीच कॉपी और संग्रहीत किया जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.