একই সামগ্রিক প্রকল্পের অংশ এমন একাধিক গিট সংগ্রহস্থল গোষ্ঠীভুক্ত করা


14

ধরা যাক আমার কাছে একটি প্রকল্প রয়েছে যার একাধিক উপাদান রয়েছে: একটি সার্ভার উপাদান, একটি ওয়েব অ্যাপ্লিকেশন উপাদান, একটি আইওএস উপাদান, একটি অ্যান্ড্রয়েড উপাদান ইত্যাদি These এই উপাদানগুলি সমস্ত পৃথক কোডবেস, তবে আলগাভাবে জোড়াযুক্ত (যেমন সার্ভারে পরিবর্তন) কোডের জন্য অন্যান্য সমস্ত উপাদানগুলিতেও পরিবর্তন দরকার হতে পারে)

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

অন্যদিকে, আপনি যদি প্রতিটি উপাদানকে আলাদা সংগ্রহস্থল হিসাবে তৈরি করেন তবে আপনি কীভাবে এই সংগ্রহস্থলগুলিকে "লিঙ্ক" করতে সক্ষম হবেন যাতে আপনি জানতে পারবেন যে অ্যাপ্লিকেশনটির 2.0 সংস্করণটির জন্য সার্ভার উপাদানটির 1.5 সংস্করণ ইত্যাদি প্রয়োজন?

একাধিক, সম্পর্কিত রেপোগুলি আরও কার্যকরভাবে পরিচালনা করার জন্য ডেট রেডমেস (বা কিছু ভাল সমাধান আমি দেখতে পাচ্ছি না) রাখার বাইরে গিটের কোনও বৈশিষ্ট্য রয়েছে কি?


এই উপাদানগুলি কি একে অপরের উপর নির্ভর করে যেমন একটি রিলিজযোগ্য উপাদান এবং একটি লাইব্রেরির মধ্যে সম্পর্কের মতো? অথবা আপনি কেবল আপনার সমস্ত পুনঃনির্মাণযোগ্য উপাদান সিঙ্কে রাখার চেষ্টা করছেন?
বেহুদা

এখানে স্ট্যাক ওভারফ্লো সম্পর্কে একটি পুরানো আলোচনা রয়েছে (অলৌকিকভাবে এখনও বন্ধ হয়নি)।
ড্যান ড্যাসক্লেস্কু

উত্তর:


6

সাব-প্রোজেক্টগুলি হ'ল জায়গাটি বিতরণ করা হয়েছিল সংস্করণ নিয়ন্ত্রণ ব্যবস্থা (ডিভিসিএস) থেকে শুরু করা, যদি না খুলে, অবশ্যই কিছুটা দুর্বল হয়ে যায়।

Git submodules এবং তত্পর subrepositories উপ-প্রকল্পের সমর্থনের জন্য উভয় লক্ষ্য। উভয়ই মুক্তি-দ্বারা-মুক্তির উন্নতি করেছে (এই দিকটিতে যে মার্চুরিয়ালের পুরানো "এই বৈশিষ্ট্যটি বিদ্যমান, তবে আপনার সম্ভবত এটি ব্যবহার করা উচিত নয়" সতর্কতা আর সামনে-কেন্দ্রের নয়))

তবুও, মাল্টি-প্রজেক্টের রেপো প্রতিটি-ব্যবহারের বৈশিষ্ট্যযুক্ত বৈশিষ্ট্যের চেয়ে বিশেষায়িত ব্যবহারের ক্ষেত্রে বেশি রয়ে গেছে। ডকুমেন্টেশনে অসংখ্য ক্যাভেটস এবং "কীভাবে এটি ব্যবহার করতে হবে" নির্দেশাবলী রয়েছে যা পরিষ্কার করে দেয় যে "প্রকল্পের প্রকল্পগুলি" পরিচালনা একটি দ্বি-স্তরের উদ্বেগ, মেটা পরিচালনার সাথে ডাইরেক্ট, একক স্তরের প্রকল্প পরিচালনার চেয়ে কিছুটা হলেও সত্যই আলাদা। ফলস্বরূপ, সেখানে অনেক কম অভিজ্ঞতা আছে। এবং "গিট সাবমডিউলগুলি ব্যবহার করবেন না!" এর কোনও ঘাটতি নেই! এবং "মার্উরিয়াল সাব্রেপোস এড়ানো!" মন্তব্য এবং ব্লগ পোস্ট।

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

এটি বলার অপেক্ষা রাখে না যে সাবমডিউলগুলি / সাবরেপোস পরিচালনা করা আপনার পক্ষে কার্যকর হবে না তবে এটি এমন কিছু যা যত্ন সহকারে করা উচিত এবং অবশ্যই কিছু পূর্ব পরীক্ষা এবং পরিকল্পনা করা উচিত।

আপনি গিটকে কেন্দ্র করে কেন্দ্রীভূত হওয়ায় আপনার গিট সাবট্রিজগুলিও অন্বেষণ করা উচিত যা কিছুকে গিট সাবমডিউলগুলির জন্য আরও ভাল বিকল্প বলে মনে হয়


1
২০১ 2016 সালে পুনর্বিবেচনা: এইচজি ডক্স এখনও সাবরেপোসকে শেষ রিসোর্টের একটি বৈশিষ্ট্য হিসাবে ডাকে । গিট ডকস আরও উত্সাহী, এবং এর সাব মড্যুল বৈশিষ্ট্যটি এখন আরও সংহত হয়েছে। দু'জনেই এখন নেস্টেড রেপোগুলি ভালভাবে পরিচালনা করে ( নেস্টেড রেপোগুলি বোঝায় যে "এটি পরিচালনা করছে এমন ফাইলগুলির সাথে" বল রয়েছে), অন্য একটি দরকারী সাব-রেপো বিকল্প দেয়। তবে ডিভিসিএস সরঞ্জামগুলি একক-স্তরের রেপোতে এখনও প্রধান, সুতরাং "সাব-রেপো => একাধিক স্তরের পরিচালনা" এবং "ড্রাগনগুলি এখানে থাকুন" সতর্কতা প্রাসঙ্গিক থাকে।
জোনাথন ইউনিস

2

আপনি যদি সি # ব্যবহার করেন তবে আপনি নিউগেট ব্যবহার করতে পারেন।

প্রতিটি উপাদান একটি লাইব্রেরি তৈরি করুন এবং তাদের নিজস্ব ভান্ডারে রাখুন। শব্দার্থক সংস্করণ অনুসারে আপনি যে মৌলিক উপাদানগুলি সংস্করণ করেন সেগুলি প্রকাশ করুন।

অবশেষে, আপনার বিল্ডার্সভারটি নুগেট প্যাকেজগুলিতে লাইব্রেরিগুলি প্যাকেজ করার জন্য পান এবং প্রান্তে অন্তর্ভুক্ত উপাদানগুলির জন্য প্রকল্পগুলিতে Nu নুগেট প্যাকেজগুলি গ্রাস করুন (আইওএস, অ্যান্ড্রয়েড)।

একই বেসিক অ্যাপ্রোচ (সংস্করণ এবং প্যাকেজ নির্ভরতা) অন্যান্য ভাষায়ও ব্যবহার করা যেতে পারে তবে এটি তেমন সুবিধাজনক হতে পারে না।

আমি আপনাকে গিট সাবমডিউলগুলি ব্যবহার করার পরামর্শ দেব না। যদিও এটি তত্ত্বের ক্ষেত্রে এই ধরণের সমস্যার জন্য ব্যবহার করা যেতে পারে, আমি মনে করি এটি এটির তুলনায় একটি বড় ঝামেলা।


2

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

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

আপনি কীভাবে এই সংগ্রহস্থলগুলিকে "লিঙ্ক" করতে সক্ষম হবেন যাতে আপনি জানতে পারেন যে অ্যাপ্লিকেশনটির ২.০ সংস্করণটির জন্য সার্ভার উপাদানটির 1.5 সংস্করণ ইত্যাদির প্রয়োজন?

এটি সাধারণত কিছু নির্ভরতা পরিচালনার কাঠামোর ডোমেন (যেমন গ্রেডল, মাভেন), নিজেই গিট নয়।

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