कंपोजर.लॉक को संस्करण नियंत्रण के लिए प्रतिबद्ध होना चाहिए?


529

मैं composer.lockएक आवेदन में एक रिपॉजिटरी के साथ प्रयोग में थोड़ा भ्रमित हूं ।

मैंने कई लोगों को यह कहते हुए देखा कि हमें .gitignore composer.lockभंडार से नहीं होना चाहिए ।

यदि मैं अपने पुस्तकालयों को अपने देव परिवेश में अद्यतन करता हूं, तो मेरे पास एक नया composer.lockहोगा लेकिन मैं उन्हें उत्पादन में अद्यतन नहीं कर पाऊंगा, क्या मैं?

क्या यह इस फ़ाइल पर विरोध उत्पन्न नहीं करेगा?


1
यही कारण है कि लिंक अब मर चुका @markus है
Kyrre

जवाबों:


672

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

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

रिपॉजिटरी में यह होने से आपको विश्वास दिलाता है कि प्रत्येक डेवलपर समान संस्करणों का उपयोग कर रहा है।


5
ठीक है, लेकिन कल्पना कीजिए कि अगर मैं उत्पादन वातावरण से पुस्तकालयों को अपडेट करता हूं, तो composer.lock को अधिलेखित कर दिया जाएगा ताकि उत्पादन से एक अगला पुल मुझे इस फाइल को मर्ज करने के लिए कहेंगे ...
पियरे डी लेसपिन

7
यदि कंपोज़र .lock संशोधित हो जाता है, तो आपको संशोधनों को रिपॉजिटरी में वापस धकेलना होगा। यदि आप सॉफ़्टवेयर को पुस्तकालयों के दिए गए संस्करणों में बाँधना चाहते हैं, तो कॉन्फ़िगरेशन में स्पष्ट रूप से ऐसा करें। इस तरह ताला कभी नहीं बदलेगा। एक निर्भरता प्रबंधन समस्या के एक संकेतक के रूप में लॉक फ़ाइल के बारे में सोचें जिसे एक या दूसरे तरीके से हल करने की आवश्यकता है।
मेजा

360
उत्पादन में आपको अपनी निर्भरता को अपडेट नहीं करना चाहिए, आपको चलना चाहिए composer installजो लॉक फ़ाइल से पढ़ेगा और कुछ भी नहीं बदलेगा।
सेल्डेक

112
"प्रोडक्शन में आपको अपनी निर्भरता को अपडेट नहीं करना चाहिए" सभी कैप्स में लिखा जाना चाहिए
जोकिन एल। रोबल्स

75
@ JoaquínL। उत्पादन में आप अपने उपकरणों को अद्यतन नहीं करेंगे! :)
Елин н

201

अनुप्रयोगों / परियोजनाओं के लिए : निश्चित रूप से हाँ।

इस पर संगीतकार प्रलेखन राज्यों (जोर के साथ):

संस्करण नियंत्रण में अपने एप्लिकेशन के composer.lock (साथ में composer.json के साथ) प्रतिबद्ध करें।

जैसे @meza ने कहा: आपको लॉक फ़ाइल को कमिट करना चाहिए ताकि आप और आपके सहयोगी संस्करणों के एक ही सेट पर काम कर रहे हों और आपको "लेकिन यह मेरे कंप्यूटर पर काम करता है" जैसे शब्दों से रोक सके। ;-)

पुस्तकालयों के लिए : शायद नहीं।

इस मामले पर संगीतकार प्रलेखन नोट:

नोट: पुस्तकालयों के लिए यह आवश्यक नहीं है कि वे लॉक फाइल (...) करें

और यहाँ बताता है :

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

पुस्तकालयों के लिए मैं @ जॉनसन जॉनसन के उत्तर से सहमत हूं।


"पुस्तकालयों" से अलग तरह से काम पर परियोजनाओं का इलाज क्यों करें?
जोश जॉनसन

4
शायद "सहकर्मियों" शब्द का उपयोग यहां भ्रमित था, मैंने इसे सहयोगियों में बदल दिया। मुख्य अंतर "मुख्य परियोजना" बनाम पुस्तकालय है, जिसमें एक मुख्य परियोजना में एक या एक से अधिक पुस्तकालय और कोड होते हैं जो उन्हें एकीकृत करते हैं। मुख्य परियोजना से संगीतकार चलाते समय यह लाइब्रेरी की कंपोज़र.लॉक फ़ाइल का उपयोग नहीं करता है, इसलिए यह नवीनतम संस्करण में इसकी निर्भरता स्थापित करता है। मुझे लगता है कि आपके पुस्तकालय का परीक्षण करते समय यह समान होना चाहिए।
बजे जेरेन फीज

2
लाइब्रेरी के साथ लॉक-फ़ाइल को कमिट करना संभवत: एक अच्छी बात है - लॉक-फाइल डॉक्यूमेंट्स जिनमें टेस्ट-सूट चलाने पर निर्भरता के संस्करण स्थापित किए गए थे। यह एक टीम में और विशेष रूप से निरंतर एकीकरण वातावरण में विशेष रूप से महत्वपूर्ण है।
mindplay.dk

गैर-तुच्छ संघर्ष तब पैदा हो सकता है जब ट्रंक 2 शाखाओं में पुन: स्थापित हो रहा है कि दोनों के पास संगीतकार के माध्यम से नए पैकेज स्थापित हैं। अभी हुआ :)
g4b0

2
@tonix, मैं कुछ प्राधिकरण के साथ इसका जवाब दे सकता हूं! मैं अपने पुस्तकालयों के लिए संगीतकार.लॉक का कारण नहीं है कि मेरा सीआई हर रात मास्टर बनाता है चाहे कोई भी हो। यह गारंटी देता है कि यदि लाइब्रेरी के किसी भी आश्रित ने अपग्रेड समस्याओं को लाइब्रेरी के एक उपयोगकर्ता के पास रखा होगा, तो सीआई विफल हो जाएगा। अच्छा काम करता है!
थियोडोर आर। स्मिथ

86

कुछ परियोजनाओं के लिए दोनों तरीकों से करने के बाद मेरा रुख यह है कि composer.lockपरियोजना के हिस्से के रूप में प्रतिबद्ध नहीं होना चाहिए।

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

यदि आप संगीतकार अद्यतनों के बीच अपनी निर्भरता बदलने के बारे में चिंतित हैं तो आपको अपनी संस्करण योजना में विश्वास की कमी है। संस्करण (1.0, 1.1, 1.2, आदि) अपरिवर्तनीय होने चाहिए और आपको प्रारंभिक सुविधा विकास के बाहर "देव-" और "X. *" वाइल्डकार्ड से बचना चाहिए।

लॉक फ़ाइल को कम करना आपकी निर्भरता प्रबंधन प्रणाली के लिए एक प्रतिगमन है क्योंकि निर्भरता संस्करण अब निहित रूप से परिभाषित हो गया है।

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


19
माना। मुझे लगता है कि यह निर्भरता संस्करणों को निर्दिष्ट करने के लिए अधिक समझ में आता है composer.jsonजहां आवश्यक संस्करण अधिक स्पष्ट रूप से कहा गया है। लेकिन अगर आप विशिष्ट संस्करणों को सेट नहीं करते हैं , तो बेहतर है कि कमिट करें composer.lock। यदि यह निर्दिष्ट किया गया है कि यह भ्रामक है, तो इसके composer.jsonअनुसार स्थापित किए गए संस्करण से भिन्न हैं composer.lock। इसके अलावा यह एप्लिकेशन (इन-हाउस या सामान्य रिलीज) और इसके देव चक्र पर निर्भर करता है। बेशक, संगीतकार डॉक्स कहते हैं , बोल्ड में, "अपने एप्लिकेशन के कंपोज़र को प्रतिबद्ध करेंसंस्करण नियंत्रण में कंपोजर (जेसन के साथ)" बुद्धिमानी से चुनें =)
क्विन कॉमेंडेंट

10
बहुत आत्मा की खोज के बाद मैंने फैसला किया है, इस बिंदु पर, संगीतकार डॉक्स गलत हैं :) मेरे पास एक नियम है कि मैं वीसीएस में उत्पन्न सामग्री नहीं जोड़ता हूं; मैं निर्माण प्रक्रिया को संभालने की अनुमति देता हूं।
जोश जॉनसन

10
क्या आपके बायोमैकेनिकल की-प्रेसर्स "जेनरेट की गई सामग्री" का उपयोग करके बनाया गया कोड नहीं है? मुझे यकीन नहीं है कि एक नीति को आधार बनाने के लिए एक ठोस मानदंड है। =)
क्विन कॉमेंडेंट

5
@borfast मुझे पता है कि मुझे बातचीत करने में थोड़ी देर हो गई है इसलिए आपने इसे इस बिंदु से देखा होगा लेकिन, आप इसमें हैश निर्दिष्ट कर सकते हैं composer.json। में requireअनुभाग में, आप रख सकते हैं: "repo": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"। यह 1) शाखा में जाएगा, 2) चेकआउट जो हैश, 3) यदि शाखा पर हैश नहीं पाया जाता है, हालांकि, यह निर्दिष्ट शाखा के प्रमुख (इस मामले में मास्टर) की जांच करेगा।
CEPA

5
@ सीईपीए - यह अजीब है। मुझे उम्मीद है कि अगर हैश नहीं मिल पा रहा है तो वह विफल हो जाएगा। खतरनाक लगता है।
नाथन जेबी

31
  1. आपको सीधे उत्पादन पर अपनी निर्भरता को अपडेट नहीं करना चाहिए।
  2. आपको अपनी कंपोज़र.लॉक फ़ाइल को नियंत्रित करना चाहिए ।
  3. आपको अपनी वास्तविक निर्भरता पर नियंत्रण नहीं करना चाहिए।

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

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

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

इस का मतलब है यहाँ तक कि जब आप यह निर्दिष्ट कर आप अपने में Laravel 4.1.31 चाहते हैं कि कि composer.json , Laravel अपने में composer.json फ़ाइल का अपना Symfony घटना डिस्पैचर के रूप में आवश्यक निर्भरता हो सकता है: 2. *। इस तरह के कॉन्फिग के साथ, आप लैफ़वेल 4.1.31 के साथ सिम्फनी इवेंट-डिस्पैचर 2.4.1 के साथ समाप्त हो सकते हैं, और आपकी टीम के किसी अन्य व्यक्ति को इवेंट-डिस्पैचर 2.6.5 के साथ लारवेल 4.1.31 हो सकता है, यह सब तब निर्भर करेगा जब पिछली बार जब आपने कंपोज़र इंस्टॉल चलाया था।

इसलिए, संस्करण सिस्टम में आपकी कंपोज़र .लॉक फ़ाइल इस उप-निर्भरता के सटीक संस्करण को संग्रहित करेगी, इसलिए, जब आप और आपका साथी एक कंपोज़र इंस्टॉल करते हैं (यह तरीका है कि आप कंपोज़र के आधार पर अपनी निर्भरताएं स्थापित करेंगे । लॉक ) आप दोनों को समान संस्करण मिलेंगे।

यदि आप अपडेट करना चाहते हैं तो क्या होगा? फिर अपने देव वातावरण में चलाएं: composer updateयह एक नया कंपोज़र .लॉक फ़ाइल उत्पन्न करेगा (यदि कुछ नया है) और आप इसे परीक्षण करने के बाद, और क्यूए परीक्षण और प्रतिगमन परीक्षण इसे और सामान। आप सभी को नए कंपोज़र डाउनलोड करने के लिए इसे पुश कर सकते हैं ।

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


1
धन्यवाद, मुझे लगता है कि यह उत्तर बताता है कि आपको कंपोजर क्यों अनलॉक करना चाहिए। और यदि नहीं, तो इसके परिणाम क्या हैं और यदि आप उनके साथ रह सकते हैं।
जोस लोज़ानो हर्नान्देज़

8

फिर आप composer.jsonअपनी परियोजना के लिए प्रतिबद्ध हैं और आपकी टीम के बाकी सभी लोग आपकी परियोजना निर्भरता को स्थापित करने के लिए संगीतकार इंस्टॉल कर सकते हैं।

लॉक फ़ाइल का बिंदु सटीक संस्करणों को रिकॉर्ड करना है जो स्थापित हैं ताकि उन्हें फिर से स्थापित किया जा सके। इसका मतलब है कि यदि आपके पास संस्करण संस्करण 1 है। * और आपका सहकर्मी संगीतकार अपडेट चलाता है, जो 1.2.4 स्थापित करता है, और तब कंपोजर को भेज देता है। जब आप संगीतकार स्थापित करते हैं, तो आप 1.2.4, यहां तक ​​कि फाइल भी प्राप्त कर सकते हैं। अगर 1.3.0 जारी किया गया है। यह सुनिश्चित करता है कि परियोजना पर काम करने वाले प्रत्येक व्यक्ति के पास एक ही सटीक संस्करण हो।

इसका मतलब यह है कि अगर पिछली बार एक कंपोज़र इंस्टॉल होने के बाद से कुछ भी किया गया है, तो, लॉक फ़ाइल के बिना, आपको नया थर्ड-पार्टी कोड नीचे खींचा जाएगा

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

स्रोत: संगीतकार: यह लॉक फाइल के बारे में है


संस्करण नियंत्रण में अपने एप्लिकेशन के composer.lock (साथ में composer.json के साथ) प्रतिबद्ध करें। यह महत्वपूर्ण है क्योंकि एक लॉक फ़ाइल मौजूद होने पर इंस्टॉलेशन कमांड जाँचता है, और यदि यह है, तो यह वहाँ निर्दिष्ट संस्करणों को डाउनलोड करता है (चाहे जो भी संगीतकार। जेसन कहते हैं)। इसका मतलब यह है कि जो कोई भी परियोजना स्थापित करेगा, वह आश्रितों के सटीक संस्करण को डाउनलोड करेगा। आपका CI सर्वर, प्रोडक्शन मशीन, आपकी टीम में अन्य डेवलपर्स, सब कुछ और सभी एक ही निर्भरता पर चलते हैं, जो कि तैनाती के कुछ हिस्सों को प्रभावित करने वाले बग की क्षमता को कम कर देता है। यहां तक ​​कि अगर आप अकेले विकसित करते हैं, तो छह महीने में जब आप परियोजना को पुनर्स्थापित कर सकते हैं तो आप आश्वस्त महसूस कर सकते हैं कि स्थापित की गई निर्भरताएं अभी भी काम कर रही हैं, भले ही आपकी निर्भरताएं कई नए संस्करणों को जारी करें।

स्रोत: संगीतकार - मूल प्रयोग


1

यदि आप अपने कोड को तोड़ने के बारे में चिंतित हैं, तो आपको यह सुनिश्चित करने के composer.lockलिए अपने संस्करण नियंत्रण प्रणाली के लिए प्रतिबद्ध होना चाहिए कि आपके सभी परियोजना सहयोगी कोड के समान संस्करण का उपयोग कर रहे हैं। लॉक फ़ाइल के बिना, आपको हर बार नया तृतीय-पक्ष कोड नीचे खींचा जाएगा।

अपवाद तब होता है जब आप एक मेटा ऐप, पुस्तकालयों का उपयोग करते हैं जहां निर्भरता को अपडेट किया जाना चाहिए (जैसे Zend फ्रेमवर्क 2 कंकाल ऐप )। इसलिए इसका उद्देश्य हर बार नवीनतम निर्भरता को हथियाना है जब आप विकास शुरू करना चाहते हैं।

स्रोत: संगीतकार: यह लॉक फाइल के बारे में है

यह भी देखें: संगीतकार अद्यतन और संगीतकार स्थापित करने के बीच अंतर क्या हैं?


1

इसका कोई सटीक उत्तर नहीं है।

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

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

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

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

इसके लिए कई रणनीतियाँ हैं और उनमें से कोई भी विशेष रूप से स्रोतों की सूची को बनाए रखने के साथ अच्छी तरह से काम करती है जब तक कि आप अपने स्रोत के पेड़ में बाहरी स्रोत नहीं रखते।

उनके पास फ़ाइल में हैश जैसी चीजें भी हैं, दो लोगों के पैकेज अपडेट करने पर वह कैसे विलीन हो जाती है? अकेले आपको यह सोचना चाहिए कि शायद यह गलत है।

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

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

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

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

लॉक फ़ाइल को रखना प्रयोज्य के लिए समस्याग्रस्त है क्योंकि संगीतकार इस बारे में बहुत गुप्त है कि क्या यह लॉक या JSON का उपयोग करता है और हमेशा एक साथ उपयोग करने के लिए अच्छी तरह से नहीं होता है। यदि आप इसे स्थापित करते हैं, तो यह केवल लॉक फाइल का उपयोग करता है यह ऐसा प्रतीत होता है यदि आप कंपोजर.जॉसन में कुछ जोड़ते हैं तो यह स्थापित नहीं होगा क्योंकि यह आपके लॉक में नहीं है। यह बिल्कुल भी सहज नहीं है कि ऑपरेशन वास्तव में क्या करते हैं और वे जोंस / लॉक फाइल के संबंध में क्या कर रहे हैं और कभी-कभी समझ में भी नहीं आता है (मदद कहते हैं कि इंस्टॉल पैकेज का नाम लेता है, लेकिन इसका उपयोग करने की कोशिश करने पर यह नहीं कहता है )।

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

अद्यतन करने में एक उम्र लगती है, RAM का रिसाव। मुझे संदेह है कि यदि आप किसी ऐसी परियोजना को उठाते हैं, जिसे कुछ समय के लिए छुआ नहीं गया है, तो यह उन संस्करणों से दिखता है, जो समय के साथ अधिक हैं, और यह संभवत: अधिक समय तक नहीं होगा और यह कुशलता से ऐसा नहीं करता है जो इसे गला देता है।

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

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

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


0

हाँ, ज़ाहिर है।

ऐसा इसलिए है क्योंकि एक स्थानीय रूप से स्थापित संगीतकार कंपोजर के लिए पहली वरीयता देगा।

यदि vcs में लॉक फ़ाइल उपलब्ध नहीं है, तो कंपोज़र नवीनतम निर्भरता या संस्करणों को स्थापित करने के लिए कंपोज़र.json फ़ाइल को इंगित करेगा।

फ़ाइल कंपोजर .lock अधिक गहराई में निर्भरता बनाए रखता है अर्थात यह हमारे सॉफ्टवेयर में शामिल पैकेज के संस्करण की वास्तविक प्रतिबद्धता की ओर इशारा करता है, इसलिए यह सबसे महत्वपूर्ण फाइलों में से एक है जो निर्भरता को अधिक सूक्ष्मता से संभालती है।

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