क्या सीएसएस को जीआईटी में संग्रहीत किया जाना चाहिए?


10

मैं जिस प्रोजेक्ट पर काम कर रहा हूं, उसके लिए अपने SASS कोड से सीनीफाइड सीएसएस उत्पन्न करने के लिए मैं गल्प का उपयोग करता हूं।

मुझे आश्चर्य हुआ कि क्या जीआईटी से लाइव पुश करने पर इस सीनीकृत सीएसएस को पुनर्जीवित करने के लिए सबसे अच्छा अभ्यास माना जाता है ...

या

जीआईटी में मिनीफाइड सीएसएस फ़ाइलों को स्टोर करने के लिए ताकि वे सर्वर के हिस्से पर आगे काम किए बिना उत्पादन के लिए स्वचालित रूप से लाइव हो जाएं?

मैं इस पर लोगों के विचारों की सराहना करता हूं। धन्यवाद!


सीएसएस / जेएस / आदि की केवल एक जगह है। संग्रहित किया जाना चाहिए /dev/null:।
R .. गिटहब स्टॉप हेल्पिंग ICE

(ऐसा इसलिए है क्योंकि आपका वेबसर्वर gzipped transport का उपयोग करने में पूरी तरह से सक्षम है।)
R .. GitHub STOP HELPING ICE

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

जवाबों:


13

"निर्भर करता है।" सामान्य विकास ट्रैकिंग के लिए, नहीं। हालांकि, क्लाउड और DevOps परिनियोजन के लिए, यह अक्सर सुविधाजनक होता है, या यहां तक ​​कि आवश्यक भी होता है।

ज्यादातर समय, @ptyx सही है । वास्तव में, उनके "नहीं" को कुछ अधिक सशक्त रूप से कहा जा सकता है। "नहीं नहीं! OMG NO! "

जीआईटी जैसे स्रोत नियंत्रण प्रणाली में खनन या संपीड़ित संपत्तियों को क्यों नहीं स्टोर करें?

  1. वे स्रोत कोड से मक्खी पर आपकी निर्माण प्रक्रिया द्वारा लगभग तुच्छ पुनर्जीवित हो सकते हैं। संपीड़ित संपत्तियों को संग्रहीत करना मूल रूप से एक ही तार्किक सामग्री को दो बार संग्रहीत करना है। यह "अपने आप को दोहराना नहीं" (उर्फ DRY ) सिद्धांत का उल्लंघन करता है ।

  2. एक कम दार्शनिक लेकिन अधिक व्यावहारिक कारण यह है कि जीआईटी में संग्रहीत होने पर खनन / अनुकूलित संपत्तियों की बहुत खराब संपीड़ितता होती है। स्रोत नियंत्रण प्रणालियां संग्रहीत प्रत्येक फ़ाइल के विभिन्न संस्करणों के बीच परिवर्तनों ("डेल्टास") को पहचानकर काम करती हैं। ऐसा करने के लिए, वे पिछले संस्करण के साथ नवीनतम फ़ाइल को "अलग" करते हैं, और फ़ाइल के हर संस्करण की पूरी प्रतिलिपि संग्रहीत करने से बचने के लिए इन डेल्टास का उपयोग करते हैं। लेकिन मिनिफाइ / ऑप्टिमाइज़ स्टेप में किए गए ट्रांसफ़ॉर्मेशन अक्सर समानताओं को हटा देते हैं और डिफॉल्ट / डेल्टा एल्गोरिदम का उपयोग करते हैं। सबसे तुच्छ उदाहरण लाइन ब्रेक और अन्य व्हाट्सएप को हटा रहा है; परिणामी संपत्ति अक्सर सिर्फ एक लंबी लाइन होती है। वेब बनाने की प्रक्रिया के कई भाग - Babel , UglifyJS , Browserify जैसे उपकरण ,कम , और Sass / SCSS - आक्रामक रूप से परिसंपत्तियों को परिवर्तित करें। उनका उत्पादन खराब है; छोटे इनपुट परिवर्तन से आउटपुट में बड़े बदलाव हो सकते हैं। नतीजतन, डिफ-एल्गोरिदम अक्सर यह विश्वास करेगा कि यह हर बार लगभग पूरी तरह से अलग फाइल देखता है। परिणामस्वरूप आपके रिपॉजिटरी अधिक तेज़ी से विकसित होंगे। आपके डिस्क काफी बड़े हो सकते हैं और आपके नेटवर्क काफी तेजी से बढ़ते हैं जो एक बड़ी चिंता का विषय नहीं है, खासकर अगर दो बार की गई / अनुकूलित संपत्तियों को संग्रहीत करने के लिए एक मूल्य था - हालांकि बिंदु 1 पर आधारित, अतिरिक्त प्रतियां सिर्फ 100% व्यर्थ हो सकती हैं ब्लोट।

हालांकि, इसके लिए एक बड़ा अपवाद है: DevOps / क्लाउड परिनियोजन। क्लाउड विक्रेताओं और देवओप्स की कई टीमें Git का उपयोग करती हैं और इसी तरह न केवल विकास अपडेट को ट्रैक करने के लिए, बल्कि परीक्षण और उत्पादन सर्वर के लिए अपने अनुप्रयोगों और परिसंपत्तियों को सक्रिय रूप से तैनात करने के लिए भी उपयोग करती हैं। इस भूमिका में, गिट की कुशलता से "क्या फाइलें बदल गईं?" यह निर्धारित करने के लिए अपनी अधिक दानेदार क्षमता के रूप में महत्वपूर्ण है "प्रत्येक फ़ाइल के भीतर क्या बदल गया है?" यदि गिट को छोटी / अनुकूलित संपत्तियों के लिए लगभग पूरी फाइल कॉपी करनी होती है, तो इससे थोड़ा अधिक समय लगता है, लेकिन कोई बड़ी बात नहीं है क्योंकि यह अभी भी उत्कृष्ट काम कर रहा है, जो प्रत्येक परियोजना में "हर फाइल की प्रतिलिपि" से बचने में मदद करता है। साइकिल चलाना।

यदि आप Git को परिनियोजन इंजन के रूप में उपयोग कर रहे हैं, तो Git में की गई / अनुकूलित संपत्तियों को संग्रहीत करना "नहीं!" से स्विच हो सकता है। वांछनीय के लिए। वास्तव में, इसकी आवश्यकता हो सकती है, यदि आपके पास सर्वर / सेवाओं पर मजबूत बिल्ड / पोस्ट-प्रोसेसिंग अवसरों की कमी है, जिसे आप तैनात करते हैं। (उस मामले में विकास और परिनियोजन परिसंपत्तियों को कैसे अलग किया जा सकता है? यह कीड़े का एक अलग प्रकार है। अभी के लिए, यह पता है कि इसे एक ही एकीकृत रिपॉजिटरी, कई शाखाओं, उप-केंद्रों, या एकाधिक ओवरलैपिंग रिपॉजिटरी सहित कई तरीकों से प्रबंधित किया जा सकता है। )


1
इसके लिए शुक्रिया! बहुत सराहना की। मैंने इसे उत्तर के रूप में चिह्नित किया है क्योंकि यह बहुत बेहतर समझा गया है।
कॉनर गॉर्नी

1
git केवल डेल्टास को स्टोर नहीं करता है। SVN करता है, लेकिन git फाइलों के भंडारण के लिए अधिक जटिल तंत्र का उपयोग करता है। कुछ लोग आपको बताते हैं कि यह हर फ़ाइल की एक पूरी प्रति संग्रहीत करता है, लेकिन मैं जो समझता हूं, यह भी गलत है। मैं यह करने की कोशिश नहीं करूँगा कि यह क्या करता है, क्योंकि मैं खुद इस पर पूरी तरह से स्पष्ट नहीं हूँ।
jpmc26

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

क्या DevOps सिर्फ git हुक का उपयोग करके स्वचालित रूप से परिनियोजित सर्वर पर minigation को ट्रिगर कर सकता है, दोनों दुनिया का सर्वश्रेष्ठ प्राप्त कर सकता है?
बुटेल बटुकस

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

17

नहीं।

स्रोत नियंत्रण में केवल स्रोत होना चाहिए। यदि यह स्रोत से उत्पन्न होता है, तो यह वहां नहीं है - और इसे आपकी निर्माण प्रक्रिया द्वारा उत्पन्न किया जाना चाहिए।

मौलिक कारण जिसे आप इंटरमीडिएट बिल्ड कलाकृतियों को नियंत्रित नहीं करना चाहते हैं, वह यह है कि यदि आप करते हैं, तो यह भरोसा करना मुश्किल हो जाता है कि जो आप चला रहे हैं, वह आपके द्वारा संशोधित स्रोत से आता है, या एक मध्यवर्ती उत्पाद से जिसे आप पुनर्निर्माण करने में विफल रहे। ।


3
उत्पन्न कोड के बारे में सोचें जिस तरह से आप निष्पादन योग्य कोड के बारे में सोचते हैं।
candied_orange

3
यह सिद्धांत हमेशा सत्य नहीं होता है। यदि आपके पास ऐसी फ़ाइलें हैं जो हैवीवेट टूल के साथ उत्पन्न होती हैं, तो आप किसी उपयोगकर्ता से होने की उम्मीद नहीं कर सकते हैं, यह उत्पन्न फ़ाइलों को गिट में डालने के लिए समझ में आ सकता है। कई लोगों ने configureइस कारण उत्पन्न ऑटोकॉफ़ स्क्रिप्ट भी डाल दी हैं ।
R .. गिटहब स्टॉप हेल्पिंग ICE

@ आर ..: आदर्श रूप से, आप उन चीजों के लिए एक अलग विरूपण साक्ष्य भंडार रखते हैं, लेकिन वास्तविकता शायद ही कभी आदर्श होती है।
केविन

@ आर आप समझौता कर सकते हैं - लेकिन यह सिर्फ इतना है। और सीएसएस मिनिफिकेशन के मामले में, मुझे नहीं लगता कि उपकरण 'हैवीवेट' या 'स्लो' या 'असुविधाजनक' हैं। इसके अलावा, वैकल्पिक निर्भरता इंजेक्शन तंत्र (मावेन, आइवी ...) हैं जो अच्छी तरह से काम करते हैं और आपको अपने स्रोत नियंत्रण में उत्पन्न कोड डालने की आवश्यकता नहीं है।
ptyx

1
@ButtleButkus मेरे पास डेप्स मामले पर बहुत अधिक विशेषज्ञता नहीं है। मैंने जो देखा है वह एक बहुत (सुविधाजनक और लचीली) परिवहन / रिलीज / तैनाती तंत्र के रूप में उपयोग किया जाता है, बजाय विशुद्ध रूप से स्रोत नियंत्रण के। जब तक 'स्रोत' git और 'डिलीवरी' git अलग-अलग (अलग-अलग रेपो या अलग-अलग शाखाएँ) नहीं हैं, इसका मतलब है कि आपको स्रोत-> बिल्ड-> वितरण योग्य श्रृंखला से कुछ हद तक समझौता करना होगा - जैसे आप स्रोत कोड वाले उत्पादन के साथ समाप्त हो जाएंगे और अतिरिक्त शाखाएं चारों ओर पड़ी हैं, और अप्रयुक्त बाइनरी उत्पादों के साथ विकास। यह एक व्यावहारिक समझौता है, लेकिन जब मैं कर सकता हूं तो मैं चिंताओं को अलग करना पसंद करता हूं।
ptyx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.