জিমফাইল.লক .gitignore এ অন্তর্ভুক্ত করা উচিত?


500

আমি বান্ডলার এবং এটি উত্পন্ন ফাইলগুলিতে এক ধরণের নতুন। আমার কাছে গিটহাবের একটি গিট রেপোর একটি অনুলিপি রয়েছে যা অনেক লোকের দ্বারা অবদান রাখছে তাই আমি অবাক হয়ে জানতে পেরেছিলাম যে বান্ডলার একটি ফাইল তৈরি করেছে যা রেপোতে বিদ্যমান ছিল না এবং .gitignoreতালিকায় ছিল না ।

যেহেতু আমি এটি কাঁটাচামচ করেছি তাই জানি যে রেপোতে এটি যুক্ত করা মূল রেপোটির জন্য কোনও কিছু ভাঙ্গবে না, তবে আমি যদি একটি অনুরোধটি করি তবে এটি কি সমস্যার সৃষ্টি করবে?

ভাণ্ডার Gemfile.lockঅন্তর্ভুক্ত করা উচিত ?


সম্পর্কিত: stackoverflow.com/questions/14034561/...
ripper234

2
লিনাক্স এবং উইন্ডোজ বাক্সে একই রেপো ভাগ করে নেওয়ার কারণে আপনি যদি এখানে নিজের পথটি খুঁজে পান তবে জো ইয়াংয়ের উত্তর দেখুন। আমার লেখার সময় এটি তৃতীয় স্থানে রয়েছে। এছাড়াও স্ট্যাকওভারফ্লো.com
পিটার বার্গ

উত্তর:


549

ধরে নিই যে আপনি কোনও রুবিজেম লিখছেন না, গেমফিল.লক আপনার ভান্ডারে থাকতে হবে। এটি আপনার প্রয়োজনীয় সমস্ত রত্ন এবং তাদের নির্ভরতার স্ন্যাপশট হিসাবে ব্যবহৃত হয়। এইভাবে বান্ডিলারকে প্রতিবার স্থাপন করার সময় সমস্ত রত্ন নির্ভরতা পুনরায় গণনা করতে হবে না etc.

নীচে কাউবয়কডের মন্তব্য থেকে:

আপনি যদি কোনও রত্ন নিয়ে কাজ করছেন তবে আপনার জেমফিল.লকটি পরীক্ষা করবেন না। আপনি যদি কোনও রেলস অ্যাপ্লিকেশনটিতে কাজ করছেন তবে আপনার জেমফিল.লকটি পরীক্ষা করুন।

লক ফাইলটি কী তা ব্যাখ্যা করার জন্য এখানে একটি নিবন্ধ রয়েছে।


88
আপনি কী কাজ করছেন তার উপর নির্ভর করে। আপনি যদি কোনও রত্ন নিয়ে কাজ করছেন তবে আপনার জেমফিল.লকটি পরীক্ষা করবেন না। আপনি যদি কোনও রেলস অ্যাপ্লিকেশনটিতে কাজ করছেন তবে আপনার জেমফিল.লকটি পরীক্ষা করুন। এখানে আরও তথ্য - yhudakatz.com/2010/12/16/…
জনহমকালিলে

সহায়ক নিবন্ধ জন্য Thx।
ashisrai_

1
আপনার উত্তরে যেটি কাউবয়কোডযুক্ত বলেছেন তা করা উচিত রে: রত্ন।
অ্যারোনা

নিবন্ধ লিঙ্ক একটি নতুন href প্রয়োজন।
রস

4
দয়া করে তা করবেন না !! আপনার Gemfile.lock যেখানে রাখুন! এখানে এবং এখানে যেমন বলেছেন ।
রিকার্ডো রুউর

50

আসল সমস্যাটি তখন ঘটে যখন আপনি একটি ওপেন-সোর্স রেল অ্যাপ্লিকেশনটিতে কাজ করছেন যার একটি কনফিগারযোগ্য ডাটাবেস অ্যাডাপ্টার থাকা দরকার needs আমি ফ্যাট ফ্রি সিআরএম এর রেল 3 শাখা বিকাশ করছি। আমার পছন্দটি পোস্টগ্রিজ, তবে আমরা ডিফল্ট ডাটাবেসটি মাইএসকিএল 2 হতে চাই।

এই ক্ষেত্রে, 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]
# -----------------------------------------------------------------------------

আমি এটি প্রতিষ্ঠিত সেরা অনুশীলন কিনা তা বলতে পারি না তবে এটি আমার পক্ষে ভাল কাজ করে।


2
খুব দরকারী তথ্য ... আপনি কেন কেবল 3 পয়েন্ট পেয়েছেন এবং কম দরকারী উত্তরে 50-কিছু পয়েন্ট রয়েছে তা নিশ্চিত নন। ওঁ, হ্যাঁ, ডেটস্ট্যাম্পগুলি দেখুন। (এসও-র একটি বড় ব্যর্থতা হ'ল অস্বচ্ছল সুবিধা যা প্রশ্ন জিজ্ঞাসা করার সাথে সাথেই উত্তর দেওয়া যায়
ering

1
@ আইকনোক্লাস্ট: আপনি যা করেছেন তা পোস্ট করে আমি সত্যিই আনন্দিত। আমি মনে করি যে এই পোস্টে আসা অনেক লোক, আমার নিজের অন্তর্ভুক্ত রয়েছে তারা প্রশ্নের শিরোনাম দ্বারা "অন্ধ" হয়ে গেছেন। আমি এখন উপলব্ধি করেছি যে আমার উত্তরটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে কেবল উত্তর দেয় এবং অগত্যা এই প্রশ্নের সঠিক উত্তর নয়। আমি অদূর ভবিষ্যতে এটি আপডেট করার কাজ করব। এটি বলেছিল, ওপি আমার উত্তরটিকে সঠিক হিসাবে চিহ্নিত না করে যদি এটি তার প্রয়োজনগুলি পূরণ করে না।
rwilliams

34

আমার এবং আমার সহকর্মীদের আলাদা জেমফিল.লক রয়েছে, কারণ আমরা বিভিন্ন প্ল্যাটফর্ম, উইন্ডোজ এবং ম্যাক ব্যবহার করি এবং আমাদের সার্ভারটি লিনাক্স।

আমরা রেপোতে জেমফিল.লক সরানোর এবং গিট রেপোতে জেমফিল.লক.সর্ভার তৈরি করার সিদ্ধান্ত নিয়েছি, ঠিক তেমনি ডাটাবেস.আইএমএল। তারপরে সার্ভারে এটি স্থাপনের আগে, আমরা ক্যাপ ডিপ্লোয়ি হুক ব্যবহার করে সার্ভারে জেমফিল.লক জেমফিল.লক.সভারটি অনুলিপি করি


5
আমার একটি অ্যাপ্লিকেশন রয়েছে যা আমি ওএসএক্সে বিকাশ করি এবং তারপরে একটি উইন্ডোজ সার্ভারে স্থাপন করতে হয়। গিট দিয়ে জেমফিল.লোককে অনুসরণ করা একটি খারাপ ধারণা হিসাবে প্রমাণিত হয়েছে তাই এটি আমার .gitignore ফাইলটিতে যায়। প্রচুর রত্নগুলির জন্য বিভিন্ন পরিবেশের জন্য বিভিন্ন সংস্করণ প্রয়োজন। আদর্শভাবে আপনার এই পরিস্থিতিতে কখনও এড়ানো উচিত নয় তবে আমার কোনও বিকল্প ছিল না (আপনাকে আইটি বিভাগকে
হতাশ

11

আর-ডাবের সাথে একমত হওয়া, এটি উত্স নিয়ন্ত্রণে রাখুন, তবে আমার কাছে আসল উপকারটি হ'ল:

অভিন্ন পরিবেশে সহযোগিতা (উইন্ডো এবং লিনাক্স / ম্যাক স্টাফ উপেক্ষা করা)। জেমফাইল.লকের আগে, প্রকল্পটি ইনস্টল করার পরবর্তী পরবর্তী লোকটি নিজেকে দোষ দিয়ে সমস্ত ধরণের বিভ্রান্তিকর ত্রুটি দেখতে পাবে, তবে সে কেবল সেই ভাগ্যবান লোক, বিদ্যমান নির্ভরতা ভঙ্গ করে সুপার রত্নটির পরবর্তী সংস্করণ পেয়েছিল।

সবচেয়ে খারাপ, সার্ভারগুলিতে এটি ঘটেছিল, শৃঙ্খলাবদ্ধ না হয়ে এবং যথাযথ সংস্করণ ইনস্টল না করে অনির্ধারিত সংস্করণ পাওয়া যায়। জেমফাইল.লক এটি সুস্পষ্ট করে তোলে এবং এটি স্পষ্টভাবে আপনাকে বলবে যে আপনার সংস্করণগুলি আলাদা।

দ্রষ্টব্য: গ্রুপ স্টাফ হিসাবে মনে রাখবেন, যেমন: বিকাশ এবং: পরীক্ষা


11

বান্ডলার ডক্সও এই প্রশ্নটিকে সম্বোধন করে:

মূল: http://gembundler.com/v1.3/rationale.html

সম্পাদনা: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html

"সংস্করণ নিয়ন্ত্রণে আপনার কোডটি পরীক্ষা করা হচ্ছে" নামক বিভাগটি দেখুন:

কিছুক্ষণ আপনার অ্যাপ্লিকেশনটি বিকাশের পরে, জেমফিল এবং জেমফিল.লোক স্ন্যাপশটের সাথে একসাথে অ্যাপ্লিকেশনটি চেক করুন। এখন, আপনার সংগ্রহস্থলটিতে অ্যাপ্লিকেশনটি নিশ্চিতভাবে কাজ করেছে তা আপনি নিশ্চিতভাবে জানতে শেষ বার ব্যবহার করেছিলেন এমন সমস্ত রত্নগুলির সঠিক সংস্করণগুলির রেকর্ড রয়েছে। মনে রাখবেন যে আপনার জেমফাইলে কেবলমাত্র তিনটি রত্নের তালিকা রয়েছে (সংস্করণ কঠোরতার বিভিন্ন ডিগ্রী সহ), আপনার প্রয়োগটি রত্নগুলির উপর নির্ভরশীল সমস্ত প্রয়োজনীয়তার বিষয়টি একবার বিবেচনা করে নিলে আপনার আবেদন কয়েক ডজন রত্নের উপর নির্ভর করে।

এটি গুরুত্বপূর্ণ: জেমফিল.লক আপনার অ্যাপ্লিকেশনটিকে আপনার নিজস্ব কোড এবং তৃতীয় পক্ষের কোড উভয়ের একক প্যাকেজ করে তোলে যা আপনি সর্বশেষে নিশ্চিতভাবেই জেনে গেছেন যে আপনি শেষবারের মতো কাজ করেছেন তা নিশ্চিতভাবেই জানেন। তৃতীয় পক্ষের কোডের সঠিক সংস্করণগুলি নির্দিষ্ট করে আপনি আপনার জেমফাইলে নির্ভর করছেন একই গ্যারান্টি সরবরাহ করবে না, কারণ রত্নগুলি সাধারণত তাদের নির্ভরতার জন্য বিভিন্ন ধরণের সংস্করণ ঘোষণা করে।

পরের বার আপনি একই মেশিনে বান্ডেল ইনস্টলটি চালাবেন, বান্ডিলার দেখতে পাবেন যে এটি ইতিমধ্যে আপনার প্রয়োজনীয় সমস্ত নির্ভরতা রয়েছে এবং ইনস্টলেশন প্রক্রিয়াটি এড়িয়ে যান।

.Bundle ডিরেক্টরি বা এর ভিতরে থাকা ফাইলগুলির মধ্যে যাচাই করবেন না। এই ফাইলগুলি প্রতিটি নির্দিষ্ট মেশিনের সাথে সুনির্দিষ্ট, এবং বান্ডিল ইনস্টল কমান্ডের রানগুলির মধ্যে ইনস্টলেশন বিকল্পগুলি বজায় রাখতে ব্যবহৃত হয়।

আপনি যদি বান্ডেল প্যাকটি চালিয়ে থাকেন তবে আপনার বান্ডিলের জন্য প্রয়োজনীয় রত্নগুলি (যদিও গিট রত্ন নয়) বিক্রেতা / ক্যাশে ডাউনলোড হবে। আপনার প্রয়োজনীয় সমস্ত রত্নগুলি যদি সেই ফোল্ডারে উপস্থিত থাকে এবং আপনার উত্স নিয়ন্ত্রণে চেক ইন করে থাকে তবে বান্ডলার ইন্টারনেট (বা রুবিগেমস সার্ভার) এর সাথে সংযুক্ত না হয়ে চলতে পারে। আপনার উত্স নিয়ন্ত্রণ সংগ্রহস্থলের আকার বৃদ্ধির কারণে এটি একটি optionচ্ছিক পদক্ষেপ এবং প্রস্তাবিত নয়।


4

কোনও জেমফাইল.লকের অর্থ নয়:

  • নতুন অবদানকারীরা পরীক্ষা চালাতে পারবেন না কারণ অদ্ভুত জিনিসগুলি ব্যর্থ হয়, তাই তারা অবদান রাখবেন না বা ব্যর্থ PRs পাবেন না ... খারাপ প্রথম অভিজ্ঞতা।
  • আপনি নিজের স্থানীয় জেমফিল.লক হারিয়ে ফেললে প্রকল্পটি আপডেট / পুনর্লিখন ব্যতীত কুড়াল বছরের পুরানো প্রকল্পে ফিরে যেতে পারেন এবং বাগটি ঠিক করতে পারবেন না lock

-> সর্বদা জেমফিল.লোক এ চেক করুন, ট্র্যাভিসগুলি মুছে ফেলুন যদি আপনি অতিরিক্তভাবে চান তবে https://grosser.it/2015/08/14/check-in-your-gemfile-lock/


3

পার্টিতে কিছুটা দেরি হলেও উত্তরগুলি এখনও আমাকে সময় নিয়েছিল এবং বিদেশী এই সমস্যাটি বোঝার জন্য পড়ে। তাই আমি জেমফিল.লক সম্পর্কে যা খুঁজে পেয়েছি তার সংক্ষিপ্ত বিবরণ দিতে চাই।

আপনি যখন একটি রেলস অ্যাপ তৈরি করছেন, আপনি নিজের স্থানীয় মেশিনে রত্নগুলির নির্দিষ্ট সংস্করণ ব্যবহার করছেন। আপনি যদি প্রডাকশন মোড এবং অন্যান্য শাখাগুলিতে ত্রুটিগুলি এড়াতে চান তবে আপনাকে সেই একটি জেমফিল.লোক ফাইলটি যে কোনও জায়গায় ব্যবহার করতে হবে এবং bundleপ্রতিবার রত্ন পরিবর্তন হওয়ার সাথে সাথে পুনর্নির্মাণের জন্য বান্ডলারকে বলতে হবে।

তাহলে Gemfile.lockআপনার উৎপাদন মেশিনে পরিবর্তিত হয়েছে এবং গীত আপনাকে ভেতরে যেতে না git pull, আপনি লেখা উচিত git reset --hardযে ফাইল পরিবর্তন এড়াতে এবং লিখতে git pullআবার।


যদি কোনও ফাইল স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়, যেমন একটি বিল্ড প্রক্রিয়া দ্বারা, এটি একটি স্পষ্ট লক্ষণ যে এটি সংস্করণ নিয়ন্ত্রণে যুক্ত করা উচিত নয়।
থমাস এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.