ভাগ করা লাইব্রেরিগুলির জন্য শাখা এবং সংস্করণ কৌশল


12

এই পোস্টগুলি সম্পর্কিত বলে মনে হচ্ছে, তবে আমার মস্তিষ্ক গলে যেতে শুরু করছে, এগুলি দেখার চেষ্টা করছে: পি

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

আমি কিছু নকল কোড ভাগ করে নেওয়া লাইব্রেরিতে টানতে চাই। আমি মূল রেপোটিকে একা রেখে চলেছি যাতে আমরা কোনও কিছু না ভাঙ্গি — আমরা প্রয়োজনীয় কোডটি যখনই সরিয়ে নিতে পারি এবং / অথবা বিদ্যমান কোডটি রিফ্যাক্টর করতে পারি। সুতরাং আমি লাইব্রেরি সহ নতুন কোডের জন্য একটি রেপো সেট আপ করেছি।

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

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

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

সুতরাং আমার প্রশ্নটি: আমি কী মিস করছি? আমি মনে করি যে আমি একটি সমাধান স্থির করেছি এবং এখন এটিতে বিভিন্নতা সন্ধান করার চেষ্টা করছি যা পরিবর্তনগুলিকে মসৃণ করবে। এই ধরণের সমস্যাটি সমাধান করার জন্য আপনি কী ধরণের কৌশল ব্যবহার করেছেন? আমি বুঝতে পারি এই প্রশ্নটি পুরো জায়গা জুড়ে; আমি অনিশ্চয়তার যে কোনও বিষয় পরিষ্কার করতে এবং পরিষ্কার করার জন্য যথাসাধ্য চেষ্টা করব।

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


স্থির ব্যয় ডুবে গেছে
বিকল্প

উত্তর:


1

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

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

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

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


6

প্রকল্পগুলির মধ্যে ভাগ করা কোডটিকে নিজেরাই প্রকল্প হিসাবে বিবেচনা করা উচিত। তাদের অবশ্যই তৃতীয় পক্ষের গ্রন্থাগারগুলির মতো একই পূর্ণতার সাথে চিকিত্সা করা উচিত। অন্য কোন উপায় নেই।

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

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


4

আপনার যদি এগুলিকে পৃথক "মডিউল" প্রকল্পগুলিতে বিভক্ত করার ক্ষমতা থাকে তবে আমি এই পদ্ধতিকে গ্রহণ করব। একটি বিষয় উদ্বিগ্ন হওয়া কোড কোডিং। এগুলি ভেঙে আপনি উদ্বেগের পৃথকীকরণ তৈরি করবেন, এটি একটি ভাল অনুশীলন।

কিছু সুবিধা:

  1. প্রতিটি মডিউলটির সাধারণ ডিবাগিং।
  2. দ্রুত বিল্ড চক্র (লাইব্রেরিগুলির পুনর্নির্মাণের কোনও পরিবর্তন হয়নি)
  3. কিছু কাজ হয়ে গেলে আপনি সেই মডিউলের বাইরে অন্য একটি অঞ্চল পরিবর্তন করে এটি ভেঙে যাওয়ার সম্ভাবনা কম করবেন (100% নয়, তবে আপনি সম্ভাবনাগুলি হ্রাস করেন)।
  4. যদি কোনও বৃহত আন্তঃনির্ভরশীল জগাখিচুড়ি না হয় তবে কাজের কার্য বিচ্ছিন্ন করা সহজ।
  5. আপনি যখন একটি লাইব্রেরি স্থির করেন তখন ছোট টুকরোগুলির দ্রুত বন্টন (আপনার কাছে .dll / .so ফাইল থাকা বড় কারণ)।

এই অংশ সম্পর্কে আমার একটি প্রশ্ন আছে:

"আমার উন্মত্ত মনে আদর্শ সমাধান হ'ল পাঠাগারগুলি ইচ্ছাকৃতভাবে বাছাই করা, সেগুলির সামঞ্জস্যপূর্ণ সংস্করণের বিরুদ্ধে নির্মিত, আলাদাভাবে গ্রন্থাগারগুলি তৈরি করা" "

আপনি স্থিতিশীল পুরো প্রকল্পটি যুক্ত? যদি তাই হয়: 6 অপ্রয়োজনীয় কোড ব্লোট হ্রাস।

কিছু নেতিবাচক:

  1. যদি প্রকল্পটি ছোট হয় তবে আপনি কেবল জটিলতা যুক্ত করছেন যেখানে এটির দরকার নেই।
  2. প্রচুর মডিউল ব্র্যাঞ্চ করা সত্যিই বড় প্রকল্পগুলির জন্য রক্ষণাবেক্ষণের সমস্যায় পরিণত হতে পারে। আমি "ভল্ট" জানি না, সুতরাং তাদের শাখাগুলি পরিচালনা ভাল বা খারাপ কিনা তা আমি নিশ্চিত নই।

এটি সি # কোড, সুতরাং এটির স্থিতিক সংখ্যার সাথে সাধারণ অর্থ যোগ করার জন্য এটি "না"। ভল্টটি সাবভারশনের মতো, প্রাক-1.5 এর মতো: পিআই এসএনএন-তে মার্জ ট্র্যাকিংয়ের জন্য এত আগ্রহের সাথে অপেক্ষা করেছিল , ভেবেছিলাম অবশেষে এলে আমি স্বর্গে ছিলাম। তারপরে আমি ডিভিসিএস পেয়েছি।
শ্যাবুলেটর

1

এখনই, দেখে মনে হচ্ছে আপনার কাছে একটি কোডবেস একবারে একটি টার্গেটে তৈরি হয়েছে built আপনার সম্ভবত পাঁচটির বেশি বিকাশকারী নেই। আমি খুব বেশি লাইব্রেরিগুলি পৃথক করার ইউটিলিটিটি দেখতে পাচ্ছি না। আপনি কোড থেকে আপনার কর্মপ্রবাহটি পরিবর্তন করতে চান -> সংকলন -> কোডে চালান -> সংকলন -> অনুলিপি -> সংকলন -> চালান ... আইক।

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

এই অবকাঠামো ব্যতীত, নিম্নলিখিতগুলির মধ্যে একটি প্রয়োগ হলে আমি প্রকল্পটি পৃথক করতাম:

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

আমি যখন আপনার প্রচুর প্রকল্প এবং কিছু ডেভলপার এবং স্বতন্ত্র মুক্তির চক্র নিযুক্ত করে তখন সেই অবকাঠামো তৈরির বিষয়ে চিন্তা করব worry

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

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


1

মার্চুরিয়ালের একটি বৈশিষ্ট্য রয়েছে যা সাবরেপোসিটরিগুলি বলে। তারা সম্প্রতি কীভাবে কাজ করে তা ব্যাখ্যা করে আমি কিলনের এই ব্লগটি পড়েছি ।

মূলত, আপনি আপনার প্রকল্পটিকে একটি লাইব্রেরি সংগ্রহস্থলের একটি নির্দিষ্ট সংশোধনের সাথে যুক্ত করেছেন। নির্ভরযোগ্য প্রকল্পগুলি না ভেঙে আপনি যতটা চান লাইব্রেরি আপডেট করতে পারেন। আপনি যখন প্রস্তুত হন, আপনি আপনার প্রকল্পে লাইব্রেরির নতুন বৈশিষ্ট্যগুলি টেনে আনতে এবং কোনও ভাঙ্গন মোকাবেলা করতে পারেন। বিভিন্ন প্রকল্প গ্রন্থাগারের বিভিন্ন সংশোধনগুলির সাথে লিঙ্ক করতে পারে, সুতরাং সেগুলি সবগুলিকে সিঙ্কে থাকতে হবে এবং একই লাইব্রেরি পুনর্বিবেচনা ব্যবহার করতে হবে না।

হতে পারে ভল্টের একই বৈশিষ্ট্য রয়েছে।


1

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

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

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