ভিসিএসে সফ্টওয়্যার সংস্করণ নম্বর সংরক্ষণ করা কি ভাল অনুশীলন?


22

একটি পণ্যের সংস্করণ, যেমন v1.0.0.100, কেবল সফ্টওয়্যারটির অনন্য উত্পাদন প্রকাশের প্রতিনিধিত্ব করে না, তবে উল্লিখিত পণ্যের জন্য বৈশিষ্ট্য সেট এবং হটফিক্স পর্যায়ে সনাক্ত করতে সহায়তা করে। এখনই আমি কোনও পণ্যের চূড়ান্ত প্যাকেজ / বিল্ড / বাইনারি সংস্করণ বজায় রাখার দুটি উপায় দেখছি:

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

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

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

দ্বিতীয় পদ্ধতির সাথে সমস্যা হ'ল পুনর্মিলন। আপনি যখন 1 বছর আগে কোনও রিলিজে ফিরে যান, আপনি তার প্রকাশের নম্বরটি সনাক্ত করতে শুধুমাত্র ট্যাগের তথ্যের উপর নির্ভর করবেন।

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

সফ্টওয়্যারটির সংস্করণ নম্বরটি রাখার সর্বোত্তম উপায় কী? "পরিচিত" অংশগুলি কি সর্বদা ভিসিএসে বজায় রাখা উচিত? এবং যদি তাই হয় তবে মূল লাইন শাখাগুলি দ্বন্দ্বগুলি কি একটি সমস্যা?

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


3
দুটি সংস্করণের মধ্যে যে কোনও version.txtসংস্করণে একক লাইন থাকে 1.0.7এবং অন্যটি 1.2.0সমাধান করা সত্যিই কঠিন? যদি দুটি শাখা পৃথক পৃথক হয়ে যায় তবে এই একমাত্র বিরোধ যদি আমি নিজেকে খুব ভাগ্যবান মনে করি। এটি কত ঘন ঘন ঘটে? যদি এটি ঘটে থাকে, তবে এটি কি ভাল জিনিস নয় যে আপনি একত্রিত সংস্করণটির কোন সংস্করণ নম্বরটি থাকা উচিত তা সম্পর্কে ভাবতে বাধ্য হন ? ("সংস্করণ" শব্দের অস্পষ্ট ব্যবহারের জন্য দুঃখিত।)
5gon12eder

1
@ 5gon12eder একত্রীকরণ সম্পর্কে অসুবিধা বা অনুভূতিটি অপ্রাসঙ্গিক। এটি সামগ্রিক সমাধানের একটি নেতিবাচক দিক।
void.pointer

উত্তর:


28

ব্যক্তিগতভাবে, আমি বিকল্প 3 নির্বাচন করি: ভিসিএস মেটাডেটাতে বিশেষ করে ট্যাগগুলিতে তথ্য সংস্করণ রাখি ।

গিট এটি করা খুব সহজ করে তোলে কারণ একটি কমান্ড রয়েছে git describeযা একটি ট্যাগের উপর ভিত্তি করে প্রতিশ্রুতিটি অনন্যভাবে বর্ণনা করতে পারে। এখানে কিভাবে এটা কাজ করে:

  • যদি বর্তমান কমিট ট্যাগ হয় তবে ট্যাগটির নাম আউটপুট করুন।
  • তা না হলে, ইতিহাস পেছনদিকে হাঁটুন যতক্ষণ না আপনি একটি ট্যাগ আউটপুট নিম্নলিখিত বিন্যাসে একটি বিবরণ খুঁজে পেতে এবং তারপর: <tag>-<number of commits since the tag>-g<abbreviated commit hash>
  • যদি ওয়ার্ক্ট্রি-তে কোনও আপত্তিজনক পরিবর্তন হয় তবে সংযোজন করুন -dirty

সুতরাং, যদি আপনি একটি রিলিজ বিল্ড করছেন, এবং কমিট ট্যাগ করেছেন 1.2.3, এটি আউটপুট হবে 1.2.3। আপনি যদি বর্তমানে ১.২.৪ এ কাজ করছেন এবং আপনি ১.২.৩ থেকে চারটি কমিট করেছেন এবং গাছটিতে আপত্তিহীন পরিবর্তন রয়েছে তবে তা আউটপুট হবে 1.2.3-4-gdeadbee-dirty

এটি অনন্য এবং একঘেয়ে, পাশাপাশি মানব-পঠনযোগ্য হওয়ার গ্যারান্টিযুক্ত এবং এটি সরাসরি সংস্করণ স্ট্রিং হিসাবে ব্যবহার করা যেতে পারে । আপনি কেবলমাত্র তা নিশ্চিত করতে হবে তা হল ট্যাগগুলির জন্য একটি উপযুক্ত নামকরণ কনভেনশন।


আমি এই ধারণাটি সত্যিই পছন্দ করি, তবে এটি JIRA + বাঁশের সাথে পরিচালনা করা কঠিন বলে মনে হয়। বাঁশগুলি কেবল শাখাগুলিতেই কাজ করে, ট্যাগগুলি নয়, তাই আপনাকে কোনও বিল্ড জেনারেট হওয়ার আগে নিশ্চিত করতে হবে যে কোনও ট্যাগ পুশ করা হয়েছে। এটি ত্রুটিযুক্ত
void.pointer

1
git describeএছাড়াও শাখার সঙ্গে কাজ করে: " --all - এর পরিবর্তে শুধুমাত্র সটীক ট্যাগ ব্যবহার, ব্যবহার কোন সুত্র পাওয়া refs/নামস্থান এই বিকল্পটি কোনো পরিচিত শাখা, দূরবর্তী-ট্র্যাকিং শাখা, অথবা লাইটওয়েট ট্যাগ মিলে দেয়।।" যদিও এটি বাঁশের সাথে কীভাবে কাজ করে তা নিশ্চিত নয়। (এটি অবশ্যই শাখাগুলির সতর্কতার সাথে নামকরণের প্রয়োজন, ঠিক যেমন ট্যাগগুলির সাথে সাধারণ মোড হয়))
জার্গ ডব্লু মিতাগ

1
আমি কিছু লোককে জানি যা গিট থেকে সম্পূর্ণ স্বয়ংক্রিয়ভাবে প্রকাশিত হয়। সংস্করণটির স্ট্রিংটি নির্মিত হয়েছে git describe, চেঞ্জলগটি উত্পন্ন হয়েছে git shortlog(ভাল, আসলে কোনও স্ক্রিপ্ট থেকে যা আউটপুটকে বিশ্লেষণ করে git log --pretty=tformat:<some custom format string>), এবং প্রকাশের নোটগুলি ট্যাগ বিবরণ থেকে উত্পন্ন হয় এবং git notesগুরুত্বপূর্ণ মাইলফলক চুক্তিতে সংযুক্ত থাকে।
জার্গ ডব্লু মিট্টাগ

আমার বক্তব্যটি হ'ল, ট্যাগটি মুক্তির আগেই তৈরি করা দরকার যাতে এটি একটি বেস নম্বর সহ সঠিকভাবে সংস্করণিত হওয়ার পরে কমিট করে। এটি মুক্তির সময় বা সময়ে ট্যাগিংয়ের নীতির বিরুদ্ধে যায় । বাঁশের পিকগুলি কমিটের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে বিল্ডগুলি তৈরি করে master(থেকে developমনে রাখবেন আমি গিটফ্লো ব্যবহার করছি)। যদি কেউ masterট্যাগ ছাড়াই একত্রীকরণের দিকে ঠেলে দেয় তবে কী হবে ? এটি সঠিক সংস্করণ ব্যবহার করবে না (বাস্তবে এটি সর্বশেষ প্রকাশের সংস্করণটি ব্যবহার করবে )
void.pointer

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

8

হ্যাঁ। বেশিরভাগ সংস্করণ নম্বরটি ভিসিতে রাখাই ভাল অনুশীলন। যদি আমরা সেমেন্টিক ভার্সন semver.org বিবেচনা করি যেখানে আমাদের মেজর.মিনোর.প্যাচ রয়েছে তবে প্রথম তিনটি অবশ্যই ভিসিতে থাকতে হবে। শেষটি হ'ল আপনার বিল্ড সার্ভারের বর্ধিত নম্বর হতে পারে কোনও বাইনারি তৈরি করা নির্দিষ্ট প্রতিশ্রুতিটিকে ব্যাকট্র্যাক করার জন্য ব্যবহৃত হয়।

.NET এ এটির সুবিধার্থে আমরা একটি ছোট সেন্টিমিডি লাইন এক্সে তৈরি করেছি যা গিটের জন্য প্রতিশ্রুতিবদ্ধ। প্রাক-বিল্ড ইভেন্টের সাথে এটি বিল্ড নম্বরটি তোলে যা টিমসিটিটি নির্মাণের সময় ট্যাগ করেছিল। এই সেমিডিআর লাইন সরঞ্জামটি অবিচ্ছিন্ন বিল্ড নম্বর সহ একটি বর্গ তৈরি করে। সংস্করণ সংখ্যা বাকী: মেজর.মিনোর.প্যাচ অন্য একটি ফাইলে কেবল একটি সাধারণ ধ্রুবক। এই দুটি ভাগ করা ফাইলগুলিকে একটি লিঙ্ক (alt + shift-ড্রাগ) হিসাবে সমাধানে প্রতিটি সমাবেশে অন্তর্ভুক্ত করা হয়।

এই পদ্ধতির যথেষ্ট শক্তিশালী যে আমরা আমাদের কোডটি তৈরি করতে এবং আমাদের কোডটি পরীক্ষা করতে পারি। অ্যাজুরেতে ঠেলাঠেলি করুন এবং কুদু আবার এটি তৈরি করুন তবে টিলসিটির বিল্ড নম্বরটি ডেল এর সংস্করণ হিসাবে।

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