আমি গিট সাব-মডিউলগুলির একটি বড় অনুরাগী । আমি এর সংস্করণ সহ একটি নির্ভরতাও ট্র্যাক করতে সক্ষম হতে চাই, যাতে আপনি আপনার প্রকল্পের পূর্ববর্তী সংস্করণে ফিরে যেতে পারেন এবং নিরাপদে এবং পরিষ্কারভাবে নির্মানের নির্ভরতার সাথে সম্পর্কিত সংস্করণ রাখতে পারেন। তদুপরি, আমাদের গ্রন্থাগারগুলিকে ওপেন সোর্স প্রকল্প হিসাবে প্রকাশ করা সহজ কারণ গ্রন্থাগারগুলির ইতিহাস তাদের উপর নির্ভরশীল অ্যাপ্লিকেশনগুলির চেয়ে পৃথক (এবং যেগুলি উন্মুক্ত উত্স হতে পারে না)।
আমি কর্মক্ষেত্রে একাধিক প্রকল্পের জন্য ওয়ার্কফ্লো স্থাপন করছি, এবং আমি ভাবছিলাম যে এটি কেমন হবে যদি আমরা একক একক প্রকল্পের পরিবর্তে এই পদ্ধতিকে কিছুটা চূড়ান্তভাবে গ্রহণ করি। আমি তাড়াতাড়ি উপলব্ধি মধ্যে কৃমি একটি সম্ভাব্য নেই সত্যিই উপ-মডিউল ব্যবহার করে।
: অ্যাপ্লিকেশন একজোড়া ত studioএবং player, এবং নির্ভরশীল লাইব্রেরি core, graphএবং network, যেখানে নির্ভরতা নিম্নরূপ:
coreএকক হয়graphউপর নির্ভর করেcore(উপ-মডিউল এ এ./libs/core)networkDepdends oncore(উপ-মডিউল এ এ./libs/core)studioউপর নির্ভর করেgraphএবংnetwork(উপ-মডিউলগুলি এ./libs/graphএবং./libs/network)playerউপর নির্ভর করেgraphএবংnetwork(উপ-মডিউলগুলি এ./libs/graphএবং./libs/network)
মনে করুন যে আমরা সিএমকে ব্যবহার করছি এবং এই প্রতিটি প্রকল্পের ইউনিট পরীক্ষা এবং সমস্ত কাজ রয়েছে। প্রতিটি প্রকল্পের (সহ studioএবং player) অবশ্যই কোড মেট্রিক্স, ইউনিট পরীক্ষার, ইত্যাদি সম্পাদনের জন্য একক সংকলন করতে সক্ষম হতে হবে including
জিনিসটি একটি পুনরাবৃত্তিযোগ্য git submodule fetch, তারপরে আপনি নিম্নলিখিত ডিরেক্টরি কাঠামোটি পাবেন:
studio/
studio/libs/ (sub-module depth: 1)
studio/libs/graph/
studio/libs/graph/libs/ (sub-module depth: 2)
studio/libs/graph/libs/core/
studio/libs/network/
studio/libs/network/libs/ (sub-module depth: 2)
studio/libs/network/libs/core/
প্রকল্পে coreদুবার ক্লোন করা হয়েছে তা লক্ষ্য করুন studio। এই নষ্ট ডিস্কের জায়গা বাদে, আমার একটি বিল্ড সিস্টেমের সমস্যা আছে কারণ আমি coreদু'বার তৈরি করছি এবং আমি এর দুটি পৃথক সংস্করণ সম্ভবত পাব core।
প্রশ্ন
আমি কীভাবে সাব-মডিউলগুলি সংগঠিত করব যাতে সাধারণ নেস্টেড সাব-মডিউলগুলির একাধিক অনুলিপি না পেয়ে সংস্করণযুক্ত নির্ভরতা এবং স্বতন্ত্র বিল্ডটি পেতে পারি?
সম্ভাব্য সমাধান
লাইব্রেরি নির্ভরতা যদি কিছুটা পরামর্শ থাকে (যেমন "একটি" সংস্করণ এক্স এর সাথে কাজ করার জন্য পরিচিত "বা" কেবলমাত্র সংস্করণ এক্সটি আনুষ্ঠানিকভাবে সমর্থিত "ফ্যাশন) এবং সম্ভাব্য নির্ভর অ্যাপ্লিকেশন বা লাইব্রেরিগুলি যে কোনও সংস্করণ পছন্দ করে তার সাথে বিল্ডিংয়ের জন্য দায়বদ্ধ, তবে আমি নিম্নলিখিত পরিস্থিতি কল্পনা করতে পারি:
- এর জন্য বিল্ড সিস্টেমটি রাখুন
graphএবংnetworkতাদের কোথায় পাবেন তা বলুনcore(উদাহরণস্বরূপ একটি সংকলকের মাধ্যমে পাথ অন্তর্ভুক্ত)। দুটি স্ট্যান্ডলোন এবং "নির্ভরতা" নির্ধারণ লক্ষ্য নির্ধারণ করুন, যেখানে "স্ট্যান্ডসোনাল" "নির্ভরতা" এর উপর ভিত্তি করে স্থানীয়coreউপ-মডিউলটিতে নির্দেশ করার অন্তর্ভুক্ত পথটি যুক্ত করে । - একটি অতিরিক্ত নির্ভরতা পরিচয় করিয়ে দিন:
studioচালুcore। তারপরে, সাব-মডিউলটির নিজস্ব অনুলিপিটির অন্তর্ভুক্ত করার পথটিstudioতৈরি করেcore, সেট করেcore, তারপরেgraphএবংnetwork"নির্ভরতা" মোডে তৈরি করে।
ফলস্বরূপ ফোল্ডার কাঠামোটি দেখে মনে হচ্ছে:
studio/
studio/libs/ (sub-module depth: 1)
studio/libs/core/
studio/libs/graph/
studio/libs/graph/libs/ (empty folder, sub-modules not fetched)
studio/libs/network/
studio/libs/network/libs/ (empty folder, sub-modules not fetched)
যাইহোক, এই কিছু বিল্ড সিস্টেম যাদু (আমি বেশ আত্মবিশ্বাসী এই CMake দিয়ে করা যাবে নই) এবং সংস্করণ আপডেটের পক্ষ থেকে ম্যানুয়াল কাজ বিট (আপডেট প্রয়োজন graphএছাড়াও আপডেট দরকার হবে coreএবং networkএকটি সামঞ্জস্যপূর্ণ সংস্করণ পেতে coreসব প্রকল্পে) ।
এই সম্পর্কে কোন চিন্তা?