Thumbnail image for course

Git for Freshers

VCS এবং Git এর সাথে পরিচয়

Version Control কি এবং কেন জরুরী?

Version Control কি এবং কেন জরুরী?

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

Version Control সম্পর্কে

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

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

Local Version Control Systems

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

এই সমস্যাগুলোর সমাধান করতে অনেক আগে থেকেই প্রোগ্রামাররা লোকাল ভি সি এস (Local VCS) তৈরি করে, যেখানে একটি ছোট্ট ডেটাবেইসে চেইঞ্জ হিস্টরি (change history) রাখা হতো।

Figure 1. Local version control diagramFigure 1. Local version control diagram

সবচেয়ে জনপ্রিয় লোকাল ভি সি এস (Local VCS) টুলগুলোর একটি ছিল আর সি এস (RCS), যা এখনও অনেক কম্পিউটারে ডিফল্টভাবে পাওয়া যায়। আর সি এস (RCS) ফাইলের মধ্যে ডিফ (Diff) (প্যাচ সেট) একটি নির্দিষ্ট ফরম্যাটে সেভ করে এবং যেকোনো সময় সেই ডিফ-গুলো যোগ করে ফাইলের আগের অবস্থা পুনরায় তৈরি করতে পারে।

Centralized Version Control Systems

পরবর্তী বড় চ্যালেঞ্জ আসে তখন, যখন একাধিক ডেভেলপারকে একসাথে কাজ করতে হয়। এই সমস্যার সমাধানে সেন্ট্রালাইজড ভার্সন কন্ট্রোল সিস্টেমস (CVCSs) তৈরি করা হয়। এই ধরনের সিস্টেম (যেমন: সি ভি এস (CVS), সাবভার্সন (Subversion), এবং পারফোর্স (Perforce)) একটি সেন্ট্রাল সার্ভার ব্যবহার করে যেখানে সব ভার্সনড ফাইল রাখা হয়, এবং বিভিন্ন ক্লায়েন্ট সেই সার্ভার থেকে ফাইল চেক আউট করে।

Figure 2. Centralized version control diagram

Figure 2. Centralized version control diagram

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

তবে এই সেটআপের কিছু বড় দুর্বলতাও আছে। সবচেয়ে বড় সমস্যা হলো — একটি মাত্র সার্ভার থাকায় সেটিই পুরো সিস্টেমের "সিঙ্গেল পয়েন্ট অব ফেইলিউর (single point of failure)" হয়ে দাঁড়ায়। যদি সেই সার্ভারটি এক ঘণ্টার জন্যও বন্ধ হয়ে যায়, তাহলে ওই সময় কেউই কাজ করতে পারবে না, এমনকি নিজের কাজেও ভার্সন কন্ট্রোল করতে পারবে না। আর যদি সার্ভারের হার্ডডিস্ক নষ্ট হয়ে যায় এবং ব্যাকআপ না থাকে, তাহলে পুরো প্রোজেক্টের চেইঞ্জ হিস্টরি (change history) হারিয়ে যেতে পারে — যেটুকু ফাইল কেউ কেউ লোকাল মেশিনে রেখে দিয়েছিল শুধু সেটুকুই বেঁচে থাকবে। লোকাল ভি সি এস (Local VCS)-এও এই একই সমস্যা থাকে — একক কোনো জায়গায় পুরো চেইঞ্জ হিস্টরি (change history) রাখা থাকলে, সেটি নষ্ট হলে সবকিছু শেষ।

Distributed Version Control Systems

এই জায়গাতেই ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেমস (DVCSs) উদ্ভব হয়। ডি ভি সি এস (DVCS)-এ (যেমন: গিট (Git), মারকিউরিয়াল (Mercurial), বা ডার্কস (Darcs)), ক্লায়েন্টরা শুধু শেষ ভার্সনের ফাইলই ডাউনলোড করে না, বরং পুরো রিপোজিটরির একটি কপি মিরর করে নেয় তার সকল চেইঞ্জ হিস্টরি (change history) সহ। ফলে, যদি কোনো সার্ভার নষ্টও হয়ে যায়, এবং সবাই ওই সার্ভারের মাধ্যমে কাজ করছিল, তাহলেও যেকোনো একটি ক্লায়েন্ট রিপোজিটরি থেকেই সেই সার্ভার আগের অবস্থায় নেওয়া সম্ভব। প্রতিটি ক্লোন আসলে পুরো ডেটার একটি ব্যাকআপ।

Figure 3. Distributed version control diagramFigure 3. Distributed version control diagram

এছাড়াও, ডি ভি সি এস (DVCS) সিস্টেমগুলো সাধারণত একাধিক রিমোট রিপোজিটরির সাথেও ভালোভাবে কাজ করতে পারে। এর মানে হলো, আপনি একাধিক টিমের সাথে এক প্রোজেক্টে ভিন্ন ভিন্নভাবে কাজ করতে পারেন। এর ফলে এমন অনেক ওয়ার্কফ্লো তৈরি করা সম্ভব যা সেন্ট্রালাইজড সিস্টেমে সম্ভব নয়, যেমন: হায়ারার্কিকাল (hierarchical) মডেল