আপনি কীভাবে আপনার লাইব্রেরির বিভিন্ন সংস্করণ সংস্করণ নিয়ন্ত্রণে রাখবেন? আপনি ট্যাগ ব্যবহার করেন? নাকি শাখা? নাকি অন্য কোন পদ্ধতি?


24

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

ফোল্ডারটি সংস্করণ নিয়ন্ত্রণের অধীনে রাখলে এটি অপ্রয়োজনীয় মনে হয়। অপ্রয়োজনীয়তা ছাড়াও, কেউ যদি সর্বশেষতম সংস্করণটি পেতে চায় তবে সে কেবল importস / cloneএস হলে তারা সমস্ত সংস্করণ ডাউনলোড করে ।

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

পদ্ধতি 1: ট্যাগ ব্যবহার করে

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

পদ্ধতি 2: ব্রাঞ্চিং সংস্করণ

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

সুতরাং শাখাগুলি এটির মতো দেখাবে:

                  v1.2.1  v1.2.2
                 /       /
 v1.0.0   v1.2.0---------     v2.0.0
/        /                   /
-------------------------------------- dev

প্রতিটি ক্ষুদ্র সংস্করণ আপডেটের জন্য আপনার শাখা রয়েছে। (মনে রাখবেন যে উপরের গ্রাফে v1.2.1 এবং v1.2.2 প্রকাশিত হয়েছে বা v2.0.0 প্রকাশিত হওয়ার পরে তৈরি হয়েছে, সুতরাং তারা v1.2.0 এবং v2.0.0 এর মধ্যে বিকাশের অংশ ছিল না it এটিকে পুরানো সংস্করণগুলির সমর্থন হিসাবে ভাবেন)

পদ্ধতি 3: শাখা উন্নয়ন

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

এই ক্ষেত্রে, শাখাগুলি এইরকম দেখাবে:

 ________  ____  ________________  _____ dev
/        \/    \/                \/
---------------------------------- latest_version

সম্ভবত এটি ট্যাগের সাথে একত্রে করা দরকার?

প্রশ্নটি!

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

উত্তর:


17

ট্যাগ এবং শাখাগুলি পারস্পরিক নয়, আপনি (এবং আইএমও সাধারণত হওয়া উচিত) উভয়টি ব্যবহার করতে পারেন। ট্যাগগুলি বিকাশের মাইলফলক চিহ্নিত করার জন্য রয়েছে। যেমন আপনি আপনার পণ্যের সংস্করণ 1.2 জন্য একটি শাখা খুলতে, এবং আপনি চিহ্নিত v1.2 Beta, RC1, RC2, Final(এবং তারপর, প্রয়োজন হলে, SP1যে একই ডালে ট্যাগ ইত্যাদি)।

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


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

@ শাহবাজ, হ্যাঁ, তবে মূল বিষয়টি হ'ল ট্যাগযুক্ত সংস্করণগুলি কেবল পঠিত হয়, আপনি সেগুলি পরিবর্তন করতে পারবেন না। এর অর্থ হ'ল ট্রাঙ্কে নতুন বৈশিষ্ট্য বিকাশের সময় আপনি পুরানো সংস্করণগুলিতে বাগগুলি ঠিক করতে পারবেন না।
প্যাটার তুরিক

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

6

আমি সংস্করণ নম্বর সহ অনেক ফোল্ডারের ভিতরে লাইব্রেরির নাম সহ একটি ফোল্ডার রেখেছিলাম।

এটি কার্যকরভাবে, যেমন আপনি লক্ষ্য করেছেন, একটি ভুল পদ্ধতির, যেহেতু আপনার কাছে ইতিমধ্যে সংস্করণ নিয়ন্ত্রণ করার জন্য ... সংস্করণগুলি নিয়ন্ত্রণ করা রয়েছে।

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


হ্যাঁ, সংস্করণ নিয়ন্ত্রণে আমার কোড পাওয়ার আগে প্রথম পদ্ধতিটি আমি করতাম। আমি আপনার লিঙ্কটি পড়ব এবং আপনাকে
শাহবাজ

লিঙ্কটি দুর্দান্ত ছিল। আমি অনুভূতি পেয়েছি যে পদ্ধতি 2 আরও ভাল (কমপক্ষে আমার জন্য, এটি মূলত গ্রন্থাগারগুলির একমাত্র বিকাশকারী)
শাহবাজ

3

তিনটি পদ্ধতি পারস্পরিক একচেটিয়া নয় এবং আপনার সংস্করণ নিয়ন্ত্রণ থেকে সর্বাধিক সুবিধা অর্জনের জন্য আপনার তিনটি একত্রিত করা উচিত।

আমার অংশ হিসাবে, আমি ডিফল্টরূপে 1 এবং 3 পদ্ধতির সংমিশ্রণটি ব্যবহার করব, অর্থাৎ কোনও বৈশিষ্ট্য উত্পাদন-প্রস্তুত না হওয়া পর্যন্ত কোনও বৈশিষ্ট্য বা বিকাশ শাখায় বিকাশ করুন এবং তারপরে আবার ট্রাঙ্কে মার্জ করুন। এইভাবে, ট্রাঙ্ক সবসময় স্থিতিশীল, ব্যবহারযোগ্য-বিকাশের উন্নয়নের বর্তমান অবস্থার প্রতিনিধিত্ব করে এবং এসএনএন: বাহ্যিক প্রকল্পগুলির দ্বারা নিরাপদে লিঙ্ক করা যেতে পারে। আপনি যখন কোনও সংস্করণ প্রকাশ করবেন তখন ট্যাগ করুন।

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


2

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

একাধিক প্রকাশ সংস্করণ বজায় রাখতে শাখা ব্যবহারের বিষয়ে আরও তথ্যের জন্য আমার উত্তরটি এখানে দেখুন ।

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