গিট সাবমডিউল বনাম গিট ক্লোন


18

আমি গিটহাবের ওপেন সোর্স প্রকল্পে কাজ করছি।

এটির একটি উপ-ডিরেক্টরি / বিক্রেতা রয়েছে এতে বেশ কয়েকটি বাহ্যিক গ্রন্থাগারের অনুলিপি রয়েছে। প্রকল্পের মূল রক্ষণাবেক্ষণকারী এই ডিরেক্টরিটি একবারের মধ্যে একবার বাহ্যিক গ্রন্থাগারের নতুন অনুলিপি সহ আপডেট করেছেন।

এক ডেভেলপার আমাকে ধারণা নিয়ে খিঁচ অনুরোধ এই প্রতিস্থাপন করতে পাঠান কপি দ্বারা Git submodule

এবং আমি এটি ভাল ধারণা কিনা তা বিবেচনা করছি।

গিট সাবমডিউল প্রো:

  • সাবমডিউলগুলি বিশেষত অনুরূপ দৃশ্যের জন্য ডিজাইন করা হয়েছিল
  • এটি বিক্রেতার সাথে দুর্ঘটনাকবলিত অঙ্গীকারের সম্ভাবনা সরিয়ে দেয় যা পরবর্তী আপডেটের সময় ওভাররাইট করা হবে

গিট সাবমডিউল কনস:

  • দেখে মনে হচ্ছে গিট সাবমোডিউলগুলি রক্ষণাবেক্ষণকারী থেকে শুরু করে এমন ব্যক্তির কাছে জটিলতার দিকে ঠেলে দেয় যারা প্রকল্পটি ক্লোন / টানবেন (প্রকল্পের সাথে কাজ শুরু করার জন্য আপনি ক্লোন করার পরে প্রয়োজনীয় আরও পদক্ষেপগুলি: "গিট সাবমডিউল ইনি", "গিট সাবমডিউল আপডেট"

এ সম্পর্কে আপনার মতামত কী?

আরেকটা জিনিস. এই সমস্যাটি খুব সীমিত বাহ্যিক নির্ভরতা সহ ছোট আকারের লাইব্রেরি। আমি মনে করি যে কোনও বিল্ড টুল আপাতত এর জন্য ওভারকিল হবে।


4
বিকল্পভাবে তারা করতে পারে git clone --recursiveএবং তারপরে সাবমডিউল কমান্ডগুলি করতে হবে না। অন্য কেউ এই জালিয়াতির কথা উল্লেখ করেনি; আমি জানি যে বেশিরভাগ লোকেরা সাবমোডিয়ুলগুলি README এ বিজ্ঞাপন দেয়।
লেবি মরিসন

উত্তর:


9

সাবমডিউলের বিকল্প হ'ল ব্যবহার করা git subtreegit submoduleশেষ ব্যবহারকারীকে জটিলতা না বাড়িয়েও এর সুবিধা দেয় । তৃতীয় পক্ষের সংগ্রহস্থলটি মূল প্রকল্প গাছের সাথে একত্রীভূত হয়, তবে সেখানে মেটাডেটা এমনভাবে সঞ্চিত রয়েছে যা আপনি করতে পারেন:

  • তৃতীয় পক্ষের সংগ্রহস্থলটি পরে বের করুন, যদি কোনও আকর্ষণীয় পরিবর্তন করা হয়
  • তৃতীয় পক্ষের সংগ্রহস্থল থেকে নতুন আপডেটগুলিতে মার্জ (নোট মার্জ , ওভাররাইট নয়)

গিট ব্যবহারকারী যারা সাবমডিউলগুলি বোঝার জন্য যথেষ্ট পরিশীলিত নন, তাদের জন্য সাবট্রি পদ্ধতির কারণে আপনার প্রকল্পের ক্লোন পাওয়া অন্য কোনও ক্লোনর চেয়ে বেশি কঠিন হয়ে ওঠে। ডকুমেন্টেশন থেকে একটি সংক্ষিপ্ত বিবরণ:

সাবট্রিজগুলি সাবপ্রজেক্টগুলিকে মূল প্রকল্পের একটি উপ-ডিরেক্টরিতে অন্তর্ভুক্ত করার অনুমতি দেয়, বিকল্পভাবে সাবপ্রজেক্টের পুরো ইতিহাস সহ।

উদাহরণস্বরূপ, আপনি একটি লাইব্রেরির উত্স কোডটিকে আপনার অ্যাপ্লিকেশনটির একটি উপ-ডিরেক্টরি হিসাবে অন্তর্ভুক্ত করতে পারেন।

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

আমি সাবমডিউলগুলি ব্যবহার করে কাজের জন্য একটি প্রকল্প স্থাপন করেছি এবং প্রত্যেকের ক্লোনগুলিতে সাবমোডিয়ুলগুলি আপ টু ডেট রাখার সমস্যাগুলি খুব বেশি কাজ ছিল। আমি সম্প্রতি সর্বত্র সাবট্রিজ ব্যবহারে পরিবর্তিত হয়েছি এবং সেই সমস্যাগুলি অদৃশ্য হয়ে গেছে।

নোট করুন যে গিট-সাবট্রি git/contribডিরেক্টরিটির একটি অংশ এবং পৃথকভাবে ইনস্টল করা আবশ্যক।


4

সাবমডিউলগুলি ব্যবহার করার একটি অসুবিধা হ'ল গিথুব (এবং অন্যান্য অনেক পরিষেবা) এর টার্বলগুলি বা জিপ-সংরক্ষণাগারগুলি সাবমোডিয়ুলগুলির উত্স অন্তর্ভুক্ত করে না। অর্থাৎ সংরক্ষণাগারগুলি স্বয়ংসম্পূর্ণ নয়। এটি কোনও সমস্যার বিষয় যদি ভাণ্ডারটি ছোট হয় এবং জাভাস্ক্রিপ্ট লাইব্রেরির উপর নির্ভর করে একটি স্থির HTML সাইটের মতো একটি বিল্ড স্ক্রিপ্ট না থাকে।


3

এটি সাবমডিউলগুলি ব্যবহার করার জন্য একটি আদর্শ জায়গা। এগুলি আপনার সংগ্রহস্থলের আকার এবং জটিলতা হ্রাস করে এবং বহিরাগত গ্রন্থাগারগুলিকে নতুন সংস্করণে আপডেট করা সহজ করে তোলে।

কীভাবে ব্যবহার করবেন তা নির্ধারণ করা তাদের পক্ষে কঠিন নয় এবং তারা এই পরিস্থিতিতে মোটামুটিভাবে ব্যবহৃত হয়, তাই আপনি প্রকল্পের README এ কেবল একটি নোট দিন যে আপনি সাবমডিউলগুলি ব্যবহার করেন এবং কী করবেন এবং লোকেরা এটি নির্ধারণ করতে সক্ষম হবেন এটি. প্রথমবারের মতো সাব-মডিউলটি নিয়ে কোনও সংগ্রহস্থলের মুখোমুখি হয়ে আমি এটি পেয়েছিলাম এবং 10 থেকে 15 মিনিটের মধ্যে দৌড়ে এসেছি এবং তখন থেকে কী করব তা ভেবে কোনও সমস্যা হয়নি।


1
এটির সংযোজন হিসাবে, যদি আপনার অ্যাপ্লিকেশনটি আরম্ভ করতে ব্যর্থ হয় তবে আপনি সাবমোডিয়ালটি আরম্ভ হয়েছে কিনা তা যাচাই করতে জায়গাটিতে একটি চেক রাখতে চান - এবং এটি না থাকলে একটি বন্ধুত্বপূর্ণ ত্রুটি বার্তা সরবরাহ করুন।
জোনাথন ধনী

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

3

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

সংক্ষেপে - আপনি কি কেবল লিবস ব্যবহার করতে চান বা এগুলি আপনার কোডবেসের অংশ হিসাবে বিবেচনা করছেন? যদি তারা 'আপনার' কোড না হয়ে থাকে তবে সেগুলি সংস্করণ নিয়ন্ত্রণে রয়েছে এবং কেবল ইনস্টল করা প্রয়োজন এমন কিছু নয় কেন?


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