বিল্ড.নম্বার কেন শব্দার্থক সংস্করণের একটি "আপত্তিজনক"?


35

আমি আমাদের সিনিয়র স্থাপত্যবিদ এক প্রস্তাবিত বিল্ড সিস্টেম (Gradle / Artifactory / জেনকিন্স / পাচক বা রাঁধুনি) ব্যাখ্যা করা হয়েছিল, এবং তিনি আমাকে একটি মন্তব্য করেছে যে, আমি সাজানোর সঙ্গে মতানৈক্য, কিন্তু অভিজ্ঞ যথেষ্ট নই সত্যিই তৌল করা-ইন।

এই প্রকল্পটি একটি জাভা গ্রন্থাগার (জেআর) তৈরি করে যাতে অন্য দলগুলির দ্বারা পুনরায় ব্যবহার করা যায়। সংস্করণের জন্য, আমি এর অর্থসূচক পদ্ধতির ব্যবহার করতে চাই:

<major>.<minor>.<patch>

যেখানে patchবাগ / জরুরী স্থিরতাগুলি minorনির্দেশ করে, পিছনের দিকে সামঞ্জস্যপূর্ণ রিলিজগুলি majorনির্দেশ করে এবং এটি API এবং / অথবা পিছনে-অসামঞ্জস্যপূর্ণ পরিবর্তনগুলির বৃহত্তর রিফ্যাক্টরিংগুলি নির্দেশ করে।

ডেলিভারি এখানে যতটা যায় আমি চাই: বিকাশকারী কিছু কোড করে; এটি QA / TEST পরিবেশে বিল্ডকে ট্রিগার করে। কিছু পরীক্ষা চালানো হয় (কিছু স্বয়ংক্রিয়, কিছু ম্যানুয়াল)। যদি সমস্ত পরীক্ষা পাস হয়, তবে একটি প্রোডাকশন বিল্ড আমাদের ইন-হাউস রেপোতে জেআর প্রকাশ করে। এই মুহুর্তে জেআরটি যথাযথভাবে সংস্করণ করা উচিত এবং আমার চিন্তাভাবনাটি build.numberপ্যাচ নম্বর হিসাবে কাজ করার জন্য যা আমাদের সিআই সরঞ্জাম দ্বারা স্বয়ংক্রিয়ভাবে উত্পন্ন এবং সরবরাহ করা হয়েছিল তা ব্যবহার করা ।

সুতরাং, সংস্করণটি আসলে হ'ল:

<major>.<minor>.<build.number>

আবার কোথায় build.number সিআই সরঞ্জাম সরবরাহ করে।

স্থপতি এটিকে প্রত্যাখ্যান করে বলেছিলেন যে সিআই বিল্ড নম্বর ব্যবহার করা শব্দার্থক সংস্করণের একটি "অপব্যবহার" ছিল।

আমার প্রশ্ন: এটি কি সঠিক, এবং যদি তাই হয় তবে কেন? এবং যদি না, কেন না?

উত্তর:


45

আপনার বিল্ড সংখ্যা 0 রিসেট করা হবে না, যখন ছোটখাট এবং প্রধান সংস্করণ বৃদ্ধি, এই বিভাগে 7 এবং 8 লঙ্ঘন করে চশমা :

গৌণ সংস্করণ ওয়াই (xYz | x> 0) নতুন, পিছনের দিকে সামঞ্জস্যপূর্ণ কার্যকারিতা জনসাধারণের API এ প্রবর্তিত হলে অবশ্যই বৃদ্ধি করা দরকার। যদি কোনও জনসাধারণের API কার্যকারিতা অবনতি হিসাবে চিহ্নিত করা হয় তবে এটি বাড়ানো দরকার। ব্যক্তিগত কোডের মধ্যে উল্লেখযোগ্য নতুন কার্যকারিতা বা উন্নতিগুলি চালু করা হলে এটি বাড়ানো হতে পারে। এটিতে প্যাচ স্তর পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে। গৌণ সংস্করণ বাড়ানো হলে প্যাচ সংস্করণ 0 এ পুনরায় সেট করা আবশ্যক।

প্রধান সংস্করণ X (Xyz | X> 0) যদি কোনও পশ্চাদপটে অসঙ্গতিপূর্ণ পরিবর্তনগুলি জনসাধারণের API এ প্রবর্তিত হয় তবে অবশ্যই তা বাড়ানো উচিত। এটিতে সামান্য এবং প্যাচ স্তর পরিবর্তন অন্তর্ভুক্ত রয়েছে। প্যাচ এবং গৌণ সংস্করণ 0 এ পুনরায় সেট করা আবশ্যক যখন বড় সংস্করণ বর্ধিত হয়।

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

আপনি যদি নিজের বিল্ড নম্বরটি অন্তর্ভুক্ত করতে চান তবে আপনি এগুলি +(বিভাগ 10) পরে যুক্ত করতে পারেন :

প্যাচ বা প্রাক-প্রকাশের সংস্করণটি অবিলম্বে অনুসরণ করে একটি প্লাস চিহ্ন এবং ডট বিভাজনকারী শনাক্তকারীদের একটি সিরিজ যুক্ত করে মেটাডেটা তৈরি হতে পারে। শনাক্তকারীদের কেবলমাত্র ASCII বর্ণানুক্রমিক এবং হাইফেন [0-9A-Za-z-] থাকতে হবে। শনাক্তকারীদের খালি থাকতে হবে না। সংস্করণ অগ্রাধিকার নির্ধারণের সময় মেটাডেটা তৈরি করা উপেক্ষা করা উচিত। সুতরাং দুটি বিল্ড যা কেবল বিল্ড মেটাডেটাতে পৃথক হয়, তার একই নজির রয়েছে। উদাহরণ: 1.0.0-alpha + 001, 1.0.0 + 20130313144700, 1.0.0-বিটা + exp.sha.5114f85।


কুইক ফলোআপ @ রেসিডুয়াম (এবং উত্তরটির জন্য বিটিডাব্লু +1): তখন সংস্করণ সংখ্যাগুলি কি সর্বদা ম্যানুয়ালি উত্পন্ন করা উচিত ? যদি তা না হয় তবে সিআই / বিল্ড নম্বরের পরিবর্তে কোন সরঞ্জামগুলি ব্যবহার করা যেতে পারে?
হারপিল্ডার্প

1
@ হের্পিল্ডারপ মোটেও তা নয়, টম প্রেস্টন-ওয়ার্নারের 'অনুমান' কেবল তাঁর মতামত, অন্যান্য সংস্থাগুলির বোঝা আলাদা (সাধারণত একে অপরের সাথে খুব মিল) মানের। এর বেশিরভাগ ক্ষেত্রে, একটি স্বয়ংক্রিয়ভাবে উত্পন্ন সংখ্যাটি সংস্করণের অংশ। সিআই বিল্ড নম্বরটি ব্যবহার করা একটি বুদ্ধিমানের কাজ।
gbjbaanb

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

2
আমার হিসাবে, আমি কেবল [মেজর] ব্যবহার করি [[গৌণ] [। [পুনর্বিবেচনা] D ডিএলএলগুলির জন্য [এসভিএন-সংস্করণ], এবং [মেজর] [[নাবালিকা] instal [এসভিএন-সংস্করণ] ইনস্টলারের জন্য। সিআই বিল্ড নম্বরটি কেবল অভ্যন্তরীণ ব্যবহারের জন্য, যেখানে সিআই পরিবেশে পরিবর্তনের পরে কোন একই বিল্ডটি ঠিক একই কোডবাসের বিরুদ্ধে আবার চালিত হতে পারে তা দেখানোর জন্য (কী সার্টিফিকেট ইনস্টল করা, জিএসিতে সাধারণ লাইব্রেরি যুক্ত করা))
কিথস

1
@gbjbaanb এট আল: আমি যে অংশীদারি ছিল "সিমেন্টিক ভার্সন" সম্পর্কে প্রতিটি আলোচনায়, semver.org থেকে সংজ্ঞাটি ছিল বিষয়। "শব্দার্থক সংস্করণ" এর জন্য ওয়েবে অনুসন্ধান করুন এবং কমপক্ষে প্রথম পৃষ্ঠাটি semver.org থেকে সংজ্ঞা সম্পর্কে উপকার / বিবেকের সাথে আসে । আপনি আপনার নিজস্ব সংস্করণীকরণ স্কিমগুলি ব্যবহার করতে পারেন তবে এটিকে শব্দার্থক সংস্করণ হিসাবে অভিহিত করবেন না, কারণ এই শব্দটি স্পষ্টভাবে সংজ্ঞায়িত হয়েছে।
রেসিডিয়াম

2

একটি কারণ হ'ল প্যাচটির জন্য কয়েকটি বিল্ডের প্রয়োজন হতে পারে, সুতরাং আপনার যদি সংস্করণ 5.7 থাকে এবং আপনি এটি 5.7.1 তে প্যাচ করতে চান তবে সিআই সিস্টেমে জমা দেওয়ার পরে আপনার প্রথম দুটি বাগফিক্স তৈরি করতে ব্যর্থ হয়, তবে আপনি হবেন আপনার প্রথম প্যাচ প্রকাশের আগে 5.7.3 এ!

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

একটি বিষয় লক্ষণীয়, সংস্করণের জন্য মাইক্রোসফ্ট স্কিমা বিল্ড সংখ্যার জন্য তৃতীয় অবস্থানটি ব্যবহার করে। ক্রোম মাত্র 1 নম্বর ব্যবহার করে। উবুন্টু তারিখটি ব্যবহার করে। ব্যবহারের জন্য কোনও "স্ট্যান্ডার্ড" নেই , ব্যতীত সমস্ত সংখ্যা অবশ্যই বৃদ্ধি পাবে।


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

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

2
SemVer 2.0 স্পেকটি 2013 থেকে এবং 1.0 স্পেক 2012 থেকে যতদূর আমি বলতে পারি is অনুমানটি প্রকাশের আগে সম্ভবত নুগেট এবং রুবি তাদের নিজস্ব কাজ করছিল। এটি সেমওয়ার স্পেক উপন্যাসের মতো নয়; এটি কেবলমাত্র লোকেরা ইতিমধ্যে যা করে আসছে তা আনুষ্ঠানিক করে তাই আমরা সবশেষে এক ডজন বৈচিত্রের পরিবর্তে এটি করার এক উপায়ে সম্মত হতে পারি।
ডোভাল

"আপনার সংস্করণ 7.7 রয়েছে এবং আপনি এটি ৫.7.১ এ প্যাচ করতে চান, তবে সিআই সিস্টেমে জমা দেওয়ার পরে আপনার প্রথম দুটি বাগফিক্স তৈরি করতে ব্যর্থ হয়, তবে আপনি আপনার প্রথম প্যাচ প্রকাশ করার আগে আপনি 5.7.3 এ থাকবেন ! " ঠিক আছে, তবে কি? আমি সেমভারে কিছু মনে করতে পারছি না যা বলে যে সংখ্যাগুলি এড়ানো উচিত নয়।
অ্যান্ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.