একটি বহু-উপাদান প্রকল্পের সংস্করণ করার সর্বোত্তম উপায় কী


10

আমার কাছে একটি প্রোগ্রাম রয়েছে যা ৫ টি প্রধান উপাদান দ্বারা নির্মিত। আমি স্ট্যান্ডার্ড সংস্করণ সংখ্যাটি সীমিত করে দেখছি কারণ আমি দেখতে চাই প্রতিটি সংস্করণ কোন সংস্করণে রয়েছে।

প্রত্যেকে পৃথকভাবে তালিকাভুক্ত করা ছাড়াও কি এই কাজ করার সহজ উপায় খুঁজে পেয়েছে?


1
সমস্ত উপাদান একই সময়ে নির্মিত? তারা কি একই সাথে "মুক্তি" পেয়েছে?
অ্যাডাম শিখুন

1
@ আনা লার্ন: না, উপাদানগুলি বিভিন্ন সময়ে নির্মিত এবং প্রকাশিত হয়।
জন স্মিথ

যদি সেগুলি স্বাধীনভাবে মুক্তি পায় তবে আমি তাদের পৃথক পণ্য হিসাবে বিবেচনা করব, প্রতিটি তাদের নিজস্ব 'বিকাশ' সংস্করণ নম্বর সহ with যদি সংমিশ্রণটি বিক্রি হয় / একক পণ্য হিসাবে প্রকাশিত হয় তবে এর 'বাণিজ্যিক' সংস্করণ থাকতে পারে।
Kwebble

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

উত্তর:


7

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


2
আপনার সংস্করণ নিয়ন্ত্রণ সিস্টেমের মতো দেখতে কেমন হবে? আপনি যখন কোনও প্রধান প্রকাশ করেন তখন আপনি কি সমস্ত উপ-প্রকল্পগুলি "পিন" করেন?
রবার্ট হার্ভে

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

3

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


1
আমি এটাই ভাবছিলাম, তবে আপনি কীভাবে সিআই / সিডি পরিবেশে এটি পরিচালনা করবেন? এই ডকুমেন্টেশনটি রাখা সত্যিকারের পিআইটিএ-এর মতো মনে হয়
সিনাইস্টেটিক

1

সংস্করণ হল এমন একটি সমস্যা যা উপাদান-ভিত্তিক অ্যাপ্লিকেশন বিকাশ থেকে পৃথক। হয় আপনি প্রতিটি উপাদান সংস্করণ করতে চান, বা আপনি পুরো অ্যাপ্লিকেশন সংস্করণ করতে চান।

সংস্করণকরণের জন্য একটি সুপরিচিত প্যাটার্ন হ'ল মাইক্রোসফ্ট :

major version.minor version.build number.revision

উদাহরণস্বরূপ, আপনি .NET প্ল্যাটফর্মের ডিএলএল ফাইলগুলি ২.০.৩6০০.১ এর মতো সংস্করণ বা এর মতো কিছু দেখতে পাচ্ছেন।

সুতরাং, আমি প্রস্তাব দিচ্ছি যে আপনি প্রথমে নির্ধারণ করুন যে আপনি পুরো সিস্টেমটি বা এর উপাদানগুলি সংস্করণ করতে চান কিনা। আপনি যদি পুরো সিস্টেমটি সংস্করণ করতে চান তবে প্রতিটি সংহতকরণের পরে পুরো প্রকল্পটি তৈরি করুন এবং বিল্ড নম্বর অংশটি বাড়ান increase যদি তা না হয় তবে বিল্ডের প্রতিটি উপাদানকে কেবল সংস্করণ করুন।


আমি আপনার বিল্ড নম্বর কৌশলটির সাথে একমত নই। আপনি যখন কোনও প্রদত্ত উপাদানটির জন্য প্রকল্পটি তৈরি করেন প্রতিটি সময় বিল্ড নম্বরটি সাধারণত পরিবর্তিত হয় , যাতে এটি কাজ করে না।
রবার্ট হার্ভে

@ রবার্ট, হ্যাঁ, বিল্ড সংখ্যা শীঘ্রই একটি দুর্দান্ত সংখ্যায় পরিণত হয়। এজন্য অন্যান্য কিছু সিস্টেম এটি অন্তর্ভুক্ত করে না। আপনার যেতে বাধা নাই. তবে, প্রধান সংস্করণ এবং গৌণ সংস্করণ উভয়ই প্রায় কোনও সংস্করণ সিস্টেমে প্রস্থান করে।
সা Saeedদ নেমতি

এই জাতীয় সংস্করণ সামঞ্জস্যের জন্য এবং সত্যই সমস্যার উত্তর দেয় না।
সিনায়েস্টিক

1

সংস্করণে সতর্ক থাকুন, এটি আপনাকে হত্যা করতে পারে :-) জিনিসগুলিকে খুব জটিল করার চেষ্টা করবেন না।

আমি মনে করি যে নিম্নলিখিত পদ্ধতি আপনাকে সহায়তা করতে পারে:

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

আপনি যদি কেবল স্থানীয়ভাবে চান, একটি ছোট স্ক্রিপ্ট লিখুন যা কোডে সঞ্চিত আছে সেখান থেকে প্রতিটি উপাদানটির সংস্করণ একত্রিত করবে।

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


1

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

আপনি যদি মাইক্রোসফ্ট প্যাটার্নের মতো কিছু অনুসরণ করেন:

major-version.minor-version.build-number.revision

আপনি প্রতিটি স্বতন্ত্র উপাদানটির সংস্করণ ট্র্যাক করতে .revision ব্যবহার করতে পারেন, এবং সাধারণ পদ্ধতিতে সম্পূর্ণ পণ্য পরিবর্তনের উপর নজর রাখতে ছোট এবং বড় সংশোধন নম্বর ব্যবহার করতে পারেন।

আপনি যদি এর অনুরূপ কোনও প্যাটার্নটি অনুসরণ করেন:

Major-Version.Minor-Version.Build-Number

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


0

সংস্করণ সফ্টওয়্যার সম্পর্কে পুরো বই লেখা আছে।

এখানে আমি ব্যবহার করি এমন একটি পদ্ধতি।

প্রতিটি অংশের আকারে একটি সংস্করণ রয়েছে:

major.minor.developmental

এর প্রত্যেকটি একটি সংখ্যা, 0 থেকে শুরু করে।

একটি আনুষ্ঠানিক প্রকাশের জন্য (অর্থাত্ গ্রাহকদের) বিকাশের অংশটি সর্বদা নীতি হিসাবে 0 হতে হবে be

বিপণন সিদ্ধান্তের মাধ্যমে মেজর বর্ধিত হয়।

নাবালকগুলি বাজারে ফিচার সেটগুলি প্রকাশের মাধ্যমে বাড়ানো হয়।

উদাহরণ:

  • আমি একটি নতুন উপাদান নিয়ে বিকাশ শুরু করি, তাই আমার সংস্করণ নম্বর 0.0.1 হবে। আমি যেমন আমার ডেস্কটি আমার ক্যালিজগুলিতে ছেড়ে দিচ্ছি, উদাহরণস্বরূপ, অভ্যন্তরীণ পরীক্ষার জন্য, বিকাশ সংখ্যা 0.0.2, 0.0.3, এবং আরও অনেক উপরে চলে যায়।

  • আমি এই নতুন জিনিসটি বাজারে 1.0.0 হিসাবে প্রকাশ করি, যেখানে উন্নয়নের শেষ থেকে মুক্তির একমাত্র অনুমোদিত পরিবর্তনটি ছিল সংস্করণ নম্বর (যেমন 0.0.43 -> 1.0.0) পরিবর্তন করা।

  • কিছু নতুন বৈশিষ্ট্য যুক্ত করা হয়। আমি এই বৈশিষ্ট্যগুলি যুক্ত করে 1.0.0 বেসলাইনে কাজ শুরু করি, তাই পরীক্ষার জন্য আমি আমার সহকর্মীদের কাছে যে সংস্করণগুলি প্রকাশ করি তা হ'ল 1.0.1, 1.0.2 এবং আরও অনেক কিছু।

  • পরবর্তী বৈশিষ্ট্যগুলি 1.1.0 হিসাবে বাজারে প্রকাশিত হয়েছে।

  • বিপণন স্থির করে যে পরবর্তী বড় জিনিসটি সত্যই বড় হবে, সুতরাং এটি 2.0.0 হিসাবে প্রকাশিত হবে। আমি 1.1.1 এ কাজ শুরু করি, 1.1.x এর মাধ্যমে অগ্রগতি করছি এবং 2.0.0 হিসাবে প্রকাশ করছি।

এবং তাই চক্র পুনরাবৃত্তি।

এই পদ্ধতির, প্রতিটি উপাদান জন্য, আপনি পূর্বসূরীর ট্রেসযোগ্যতা দেয়।

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

আপনার পুনর্বিবেচনা নিয়ন্ত্রণ তারপরে প্রতিটি উপাদানকে সম্পূর্ণ আলাদাভাবে পরিচালনা করতে পারে, যার জন্য প্রতিটি জন্য বিকাশ শাখা এবং লেবেল / ট্যাগ থাকে। বা আপনি এগুলি সমস্ত একসাথে বান্ডেল করতে পারেন, সেই ক্ষেত্রে আপনি কাজের প্যাকেজ দ্বারা শাখা করতে চাইতে পারেন - তবে প্রতিটি উপাদান প্রকাশ করে লেবেল / ট্যাগ করতে ভুলবেন না (এবং আপনি যখন করেন, কেবল লেবেল / ট্যাগ করুন, কেবলমাত্র বিটগুলির জন্য নয় উপাদান। এই সময়ে আপনার কাছে সমস্ত কিছুর রাজ্যের স্ন্যাপশট রয়েছে)

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


সুতরাং আপনি কি মূলত বলছেন যে, পৃথক উপাদানগুলির ভার্সন করার জন্য আপনি তৃতীয় নম্বরটি বৃদ্ধি করেন এবং পুরো সিস্টেমটির সংস্করণ করার জন্য আপনি প্রতিটি উপাদানগুলির জন্য প্রথম বা দ্বিতীয় সংখ্যাটি বৃদ্ধি করেন?
রবার্ট হার্ভে

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

আকর্ষণীয় কীভাবে নকাররা সমস্যাটি কী তা না বলে বা আরও ভাল কিছু প্রস্তাব না দিয়ে এটিকে হ্রাস করে।
দ্রুত_বুকে

0

সারসংক্ষেপ

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

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

যদি আপনার প্রকল্পটি একাধিক সংস্করণ নিয়ন্ত্রণের ভাণ্ডারগুলিতে বিভক্ত হয় তবে আপনাকে এমন একটি ব্যবস্থাও তৈরি করতে হবে যার মাধ্যমে আপনার ইউজার ইন্টারফেসটি প্রতিটি নির্ভরশীল সংগ্রহস্থলকে জিজ্ঞাসা করতে পারে এবং এটির হ্যাশটি ব্যবহারকারীকে ফিরিয়ে দিতে পারে report

ব্যক্তিগত অভিজ্ঞতা থেকে উদাহরণ

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

আপনি যখন প্রায় পৃষ্ঠায় গিয়েছিলেন এবং প্রতিবার অ্যাপ্লিকেশন শুরু হওয়ার পরে লগ ফাইলে লেখা হয়েছিল তখন এই পুনর্বিবেচনার স্ট্রিংটি প্রদর্শিত হয়েছিল। এটি রূপ ছিল:

Application name     (6a72e7c61f54)
    Library1         (b672a13a41e1)
        Library2     (9cc35769b23a)
    Library2         (9cc35769b23a)
    Library3         (4e9f56a0186a+)
        Library2     (9cc35769b23a)
    Library4         (2e3b08c4ac76)
        Library1     (b672a13a41e1)
            Library2 (9cc35769b23a)

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

এর অর্থ হ'ল তারা যখনই কোনও ত্রুটি জানায়, সমস্যাটি হওয়ার সময় আমি সর্বদা ব্যবহৃত কোডটি পুনরায় তৈরি করতে পারতাম বা খুব কমপক্ষে নিশ্চিতভাবেই জানতাম যে আমি সেটআপটি পুনরুত্পাদন করতে পারিনি।

আমি যে বিল্ড সিস্টেমটি ব্যবহার করেছি তার আরও বিশদের জন্য, আমি এটি কীভাবে সম্পাদন করেছি, আমার কী সমস্যা হয়েছিল এবং লোকেরা কী এড়াতে পরামর্শ দিয়েছে, আমার স্ট্যাক ওভারফ্লো প্রশ্নটি দেখুন

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

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