Gemfile.lock को.gitignore में शामिल किया जाना चाहिए?




version-control bundler (5)

आर-डब के साथ सहमत हैं, इसे स्रोत नियंत्रण में रखें, लेकिन मेरे लिए, असली लाभ यह है:

समान वातावरण में सहयोग (विंडहॉ और लिनक्स / मैक सामान को अनदेखा करना)। Gemfile.lock से पहले, प्रोजेक्ट को स्थापित करने के लिए अगला दोस्त सभी प्रकार की भ्रमित त्रुटियों को देख सकता है, खुद को दोष दे रहा है, लेकिन वह केवल उस भाग्यशाली व्यक्ति को सुपर मणि का अगला संस्करण प्राप्त कर रहा था, मौजूदा निर्भरताओं को तोड़ रहा था।

इससे भी बदतर, यह सर्वर पर हुआ, अनचाहे संस्करण प्राप्त होने तक अनुशासित संस्करण प्राप्त करना और सटीक संस्करण स्थापित करना। Gemfile.lock यह स्पष्ट करता है, और यह आपको स्पष्ट रूप से बताएगा कि आपके संस्करण अलग हैं।

नोट: समूह को समूह में याद रखना, जैसे: विकास और: परीक्षण

मैं बंडलर के लिए नया और फाइलें उत्पन्न करता हूं। मेरे पास गिटहब से एक गिट रेपो की एक प्रति है जिसे कई लोगों द्वारा योगदान दिया जा रहा है, इसलिए मुझे यह जानकर आश्चर्य हुआ कि बंडलर ने एक फाइल बनाई है जो रेपो में मौजूद नहीं थी और .gitignore सूची में नहीं थी।

चूंकि मैंने इसे फोर्क किया है, मुझे पता है कि इसे रेपो में जोड़ना मुख्य रेपो के लिए कुछ भी नहीं तोड़ देगा, लेकिन अगर मैं पुल अनुरोध करता हूं, तो क्या इससे कोई समस्या होगी?

Gemfile.lock को भंडार में शामिल किया जाना चाहिए?


कोई Gemfile.lock का मतलब है:

  • नए योगदानकर्ता परीक्षण नहीं चला सकते क्योंकि अजीब चीजें असफल होती हैं, इसलिए वे पीआरएस में असफल या असफल नहीं होंगे ... बुरा पहला अनुभव।
  • आप अक्ष वर्ष पुरानी प्रोजेक्ट पर वापस नहीं जा सकते हैं और यदि आप अपना स्थानीय Gemfile.lock खो देते हैं तो प्रोजेक्ट को अपडेट / रीराइट किए बिना बग ठीक करें

-> हमेशा Gemfile.lock में जांचें, अगर आप अतिरिक्त गहन बनना चाहते हैं तो ट्रैविस इसे हटा दें https://grosser.it/2015/08/14/check-in-your-gemfile-lock/


बंडलर दस्तावेज़ इस प्रश्न को भी संबोधित करते हैं:

मूल: http://gembundler.com/v1.3/rationale.html

संपादित करें: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html

"संस्करण नियंत्रण में अपना कोड जांचना" नामक अनुभाग देखें:

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

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

अगली बार जब आप उसी मशीन पर बंडल इंस्टॉल करते हैं, तो बंडलर देखेंगे कि इसमें पहले से ही आपकी सभी निर्भरताओं की आवश्यकता है, और स्थापना प्रक्रिया को छोड़ दें।

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

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


मान लीजिए कि आप रूबीगेम नहीं लिख रहे हैं, Gemfile.lock आपके भंडार में होना चाहिए। इसका उपयोग आपके सभी आवश्यक रत्नों और उनकी निर्भरताओं के स्नैपशॉट के रूप में किया जाता है। इस तरह बंडलर को हर बार जब आप तैनात करते हैं, तो सभी मणि निर्भरताओं को फिर से समझना नहीं पड़ता है।

काउबॉयकोडेड की टिप्पणी से।

यदि आप एक मणि पर काम कर रहे हैं, तो अपने Gemfile.lock में जांच न करें।

लॉक फ़ाइल क्या है यह समझाते हुए एक अच्छा article यहां दिया गया है।


वास्तविक समस्या तब होती है जब आप ओपन-सोर्स रेल ऐप पर काम कर रहे होते हैं जिसके लिए कॉन्फ़िगर करने योग्य डेटाबेस एडेप्टर होना आवश्यक होता है। मैं फैट फ्री सीआरएम की रेल 3 शाखा विकसित कर रहा हूं। मेरी वरीयता पोस्टग्रेज़ है, लेकिन हम डिफ़ॉल्ट डेटाबेस mysql2 होना चाहते हैं।

इस मामले में, Gemfile.lock अभी भी रत्न के डिफ़ॉल्ट सेट के साथ चेक इन करने की आवश्यकता है, लेकिन मुझे अपनी मशीन पर किए गए परिवर्तनों को अनदेखा करने की आवश्यकता है। इसे पूरा करने के लिए, मैं चलाता हूं:

git update-index --assume-unchanged Gemfile.lock

और विपरीत करने के लिए:

git update-index --no-assume-unchanged Gemfile.lock

अपने Gemfile में निम्न कोड जैसे कुछ शामिल करना भी उपयोगी है। यह आपके डेटाबेस.एमएलएल के आधार पर उपयुक्त डेटाबेस एडाप्टर मणि लोड करता है।

# Loads the database adapter gem based on config/database.yml (Default: mysql2)
# -----------------------------------------------------------------------------
db_gems = {"mysql2"     => ["mysql2", ">= 0.2.6"],
           "postgresql" => ["pg",     ">= 0.9.0"],
           "sqlite3"    => ["sqlite3"]}
adapter = if File.exists?(db_config = File.join(File.dirname(__FILE__),"config","database.yml"))
  db = YAML.load_file(db_config)
  # Fetch the first configured adapter from config/database.yml
  (db["production"] || db["development"] || db["test"])["adapter"]
else
  "mysql2"
end
gem *db_gems[adapter]
# -----------------------------------------------------------------------------

मैं यह नहीं कह सकता कि यह एक स्थापित सर्वोत्तम अभ्यास है या नहीं, लेकिन यह मेरे लिए अच्छा काम करता है।





bundler