"হাই, অ্যামিগো!"

"ওহে!"

"আজ আমি আপনাকে সংস্করণ নিয়ন্ত্রণ সিস্টেম সম্পর্কে বলব।"

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

"কোডের লক্ষ লক্ষ লাইন সহ প্রকল্পগুলি একটি বাস্তবতা।"

"হুও।"

"এটা সবই খুব জটিল। লোকেরা প্রায়ই একে অপরের সাথে হস্তক্ষেপ করে, এবং প্রায়শই একই কোড পরিবর্তন করে, এবং আরও অনেক কিছু।"

"এই জগাখিচুড়িতে শৃঙ্খলা আনতে, প্রোগ্রামাররা তাদের কোডের জন্য সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করতে শুরু করে।"

" একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা একটি ক্লায়েন্ট এবং সার্ভার নিয়ে গঠিত একটি প্রোগ্রাম।

"প্রোগ্রামটি একটি সার্ভারে ডেটা (প্রোগ্রামারদের দ্বারা লিখিত কোড) সঞ্চয় করে এবং প্রোগ্রামাররা ক্লায়েন্টদের ব্যবহার করে এতে যোগ বা পরিবর্তন করে।"

"একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা এবং প্রোগ্রামগুলির মধ্যে প্রধান পার্থক্য যা নথিগুলিতে সহযোগিতামূলকভাবে কাজ করা সম্ভব করে তা হল এটি সমস্ত নথির (কোড ফাইল) পূর্ববর্তী সংস্করণগুলি সংরক্ষণ করে।"

"আপনি কি আমাকে আরো বিস্তারিত জানাতে পারেন। এটা কিভাবে কাজ করে?"

"ভাবুন যে আপনি একজন প্রোগ্রামার এবং আপনি সার্ভারে একটি সংগ্রহস্থলে সঞ্চিত একটি প্রোগ্রামের উত্স কোডে ছোট পরিবর্তন করতে চান।"

"আপনাকে যা করতে হবে তা এখানে:"

"1) সার্ভারে লগ ইন করুন।"

"2) চেকআউট কমান্ড ব্যবহার করে আপনার কম্পিউটারে সমস্ত ফাইলের সর্বশেষ সংস্করণটি অনুলিপি করুন৷"

"3) প্রয়োজনীয় ফাইলগুলিতে পরিবর্তন করুন।"

"4) প্রোগ্রামটি কম্পাইল এবং রান করা নিশ্চিত করতে স্থানীয়ভাবে চালান।"

"5) কমিট কমান্ড ব্যবহার করে সার্ভারে আপনার 'পরিবর্তন' পাঠান।"

"এটি সাধারণত অর্থবোধ করে।"

"কিন্তু আরও কিছু আছে। কল্পনা করুন যে আপনি সকালে অফিসে পৌঁছেছেন, কিন্তু ভারতে এটি ইতিমধ্যেই মধ্যাহ্নভোজের সময়। তাই আপনার ভারতীয় সহকর্মীরা ইতিমধ্যেই পরিবর্তন করেছেন এবং সার্ভারে আপনার সংগ্রহস্থলে তাদের পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করেছেন।"

"আপনাকে কোডের সর্বশেষ সংস্করণের সাথে কাজ করতে হবে। তাই আপনি আপডেট কমান্ডটি সম্পাদন করুন।"

" চেকআউট থেকে এটি কীভাবে আলাদা ?"

" চেকআউটটি সংগ্রহস্থলের সমস্ত ফাইল অনুলিপি করার জন্য ডিজাইন করা হয়েছে, তবে আপডেট শুধুমাত্র সেই ফাইলগুলিকে আপডেট করে যেগুলি সার্ভারে আপডেট করা হয়েছে যেহেতু আপনি শেষবার চেকআউট / আপডেট কমান্ড চালান।"

"এটি প্রায় কিভাবে কাজ করে:"

চেকআউট :

সংস্করণ নিয়ন্ত্রণ ব্যবস্থা - 1

"এখন, ধরা যাক আমরা ফাইল B পরিবর্তন করেছি এবং এটি সার্ভারে আপলোড করতে চাই। এটি করার জন্য, আমাদের কমিট কমান্ড ব্যবহার করতে হবে।"

সংস্করণ নিয়ন্ত্রণ ব্যবস্থা - 2

"এবং আপডেট কমান্ডটি কীভাবে কাজ করে তা এখানে :"

সংস্করণ নিয়ন্ত্রণ ব্যবস্থা - 3

"কত আকর্ষণীয়! অন্য কোন আদেশ আছে?"

"হ্যাঁ, বেশ কয়েকটি আছে। তবে আপনি কোন সংস্করণ নিয়ন্ত্রণ প্রোগ্রামটি বেছে নিয়েছেন তার উপর নির্ভর করে সেগুলি পরিবর্তিত হয়। তাই, আমি সাধারণ নীতিগুলি ব্যাখ্যা করার চেষ্টা করছি।"

"একটি ক্রিয়াকলাপও রয়েছে যাকে একত্রিত করা হয়—দুটি নথির মিলন। ধরুন দুই প্রোগ্রামার একই সময়ে একই ফাইল পরিবর্তন করেছেন। তাহলে সার্ভারে থাকা প্রোগ্রামটি উভয় পরিবর্তনের প্রতিশ্রুতিবদ্ধ হওয়ার অনুমতি দেবে না। যে ব্যক্তি প্রথমে কমিট করবে সে তার যোগ করতে পারবে। অথবা তার পরিবর্তন।"

"তাহলে অন্য ব্যক্তি কি করে?"

"সার্ভার থেকে সর্বশেষ পরিবর্তনগুলি গ্রহণ করতে তাকে একটি আপডেট অপারেশন করার জন্য আমন্ত্রণ জানানো হবে৷ যাইহোক, এটি - কমিট করার আগে একটি আপডেট করা - এটি একটি ভাল অভ্যাস।"

"তারপর, আপডেট অপারেশন চলাকালীন, ক্লায়েন্ট প্রোগ্রাম সার্ভার থেকে প্রাপ্ত পরিবর্তনগুলির সাথে স্থানীয় পরিবর্তনগুলিকে একত্রিত করার চেষ্টা করবে।"

"যদি প্রোগ্রামাররা ফাইলের বিভিন্ন অংশ পরিবর্তন করে থাকে, তাহলে সংস্করণ নিয়ন্ত্রণ প্রোগ্রাম সম্ভবত সেগুলিকে সফলভাবে একত্রিত করতে সক্ষম হবে৷  যদি পরিবর্তনগুলি একই জায়গায় থাকে, তাহলে সংস্করণ নিয়ন্ত্রণ প্রোগ্রাম একটি মার্জ বিরোধের প্রতিবেদন করবে এবং ব্যবহারকারীকে ম্যানুয়ালি করতে অনুরোধ করবে৷ পরিবর্তনগুলি একত্রিত করুন।"

"উদাহরণস্বরূপ, এটি প্রায়ই ঘটে যখন উভয় প্রোগ্রামার একটি ফাইলের শেষে কিছু যোগ করে।"

"আমি দেখছি। সামগ্রিকভাবে, এটি যুক্তিসঙ্গত বলে মনে হচ্ছে।"

"এবং আরও একটি জিনিস আছে: শাখা।"

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

"তাহলে তাদের কি করতে হবে?"

"তারা সংগ্রহস্থলে শাখা যোগ করে এগিয়ে যায়। মোটামুটিভাবে বলতে গেলে, এর অর্থ হল ভান্ডার দুটি ভাগে বিভক্ত। ফাইল বা ডিরেক্টরি দ্বারা নয়, সংস্করণ দ্বারা।"

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

"এই পথ ইতিহাসের একটি বিকল্প শাখা।"

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

"ঠিক আছে, এটি আরও বোধগম্য বলে মনে হচ্ছে।

"কেন আপনি শুধু বলতে পারলেন না যে আমরা সংগ্রহস্থলটি অনুলিপি করেছি?"

"এটি সহজ অনুলিপি নয়।"

"এই শাখাগুলি কেবল ট্রাঙ্ক থেকে আলাদা করা যায় না, তবে এটিতে একত্রিতও হয়।"

"অন্য কথায়, একটি শাখায় কিছু কাজ করা যেতে পারে, এবং তারপর এটি শেষ হলে আপনি সংগ্রহস্থলের শাখাটিকে সংগ্রহস্থলের ট্রাঙ্কে যুক্ত করতে পারেন?"

"হ্যাঁ।"

"আর ফাইলগুলোর কি হবে?"

"ফাইলগুলি মার্জ করা হবে।"

"ঠিক আছে, এটি দুর্দান্ত শোনাচ্ছে। আমি আশা করি এটি অ্যাকশনের মতোই দুর্দান্ত।"

"এবং তারপর কিছু। ঠিক আছে, আসুন একটু বিরতি নেওয়া যাক।"

" এখানে একগুচ্ছ দরকারী তথ্য রয়েছে  "