গিট (GIT) আদ্যপান্ত প্রথম পর্ব

Git: Distributed Version Control System

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

গিট কি?

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

কেন গিট ব্যাবহার করবেন?

ধরা যাক আপনি যখন আপনার প্রোডাক্ট প্রথম রিলিজ করলেন সেটি আপনার স্নাপশট ভার্সন। কয়েকদিন পরে আপনি কিছু ফিচার যোগ করলেন এবং ভার্সন দিলেন ১.0। এরপর আবার কোন ফিচার যোগ করলেন এবং ভার্সন দিলেন ১. ১, এভাবে ধরুন আপনার প্রোডাক্টের ভার্সন আছে ১. ৫ পর্যন্ত। এই ধরনের অবস্থায় আপনি যেটা করেন সেটা হলো আপনি আপনার হার্ড ড্রাইভে ফোল্ডার তৈরি করেন। যেমন প্রোডাক্ট ১. ০, প্রোডাক্ট ১. ১, প্রোডাক্ট ১. ২, প্রোডাক্ট ১. ৩, প্রোডাক্ট ১. ৪, প্রোডাক্ট ১. ৫ এবং ব্যাকআপ রাখেন। শুধু ব্যাকআপ রাখলেই হবে না আপনাকে মনে রাখতে হবে আপনি কোথায় কি পরিবর্তন করেছেন। যেটা আসলে খুবই কষ্টসাধ্য ব্যাপার। এখন প্রশ্ন হলো আপনি কেন এই কষ্টের কাজটি করবেন? কারণ আপনি আপনার হাতের নাগালেই পাচ্ছেন শক্তিশালি টুল, যেটি আপনার জন্য ভার্সন কন্ট্রোলের কাজটি করবে। এই ক্ষেত্রে আমরা ব্যাবহার করতে পারি সাব ভার্সন অথবা গিট.

সেন্ট্রালাইজড ভার্সন কনট্রোল এবং ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল

সুতরাং এখন প্রশ্ন হলো কেন আমরা সাব ভার্সন ব্যাবহার না করে গিট ব্যাবহার করবো? সাধারণত ডেভেলপাররা আগে সেন্ট্রালাইজড ভার্সন কন্ট্রোল সিস্টেম ব্যাবহার করত। এখন তারা ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম ব্যাবহার করে। আসুন দেখা যাক সেন্ট্রালাইজড ভার্সন কন্ট্রোল সিস্টেম এবং ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম কি?

সেন্ট্রালাইজড ভার্সন কনট্রোল

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

ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল

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

ট্রাঙ্ক বেজ ডেভেলপমেন্ট

গিট আমাদেরকে একটি উল্লেখযোগ্য ফিচার দিয়ে থাকে। তা হলো ট্রাঙ্ক বেজ ডেভেলপমেন্ট। চলুন দেখি কি সেটা? মনে করুন আমি একটি প্রোজেক্টে কাজ করছি। আমার প্রোজেক্ট এর বর্তমান ভার্সন ১. ০। আমি আমার প্রোজেক্টে কিছু ফিচার যোগ করলাম এবং কমিট করলাম। কমিট বলতে সাধারণত সেভ করা বুঝায়। আমরা পরবর্তিতে এটা নিয়ে বিস্তারিত জানবো। এখন ধরা যাক আমি আবার একটা ফিচার যোগ করলাম এবং কমিট করলাম। এবার মনে করুন আমার প্রজেক্টে নতুন ভার্সন আমি রিলিজ দিব। ভার্সন ২. ০। আমি আমার প্রজেক্টের ২ . ০ ভার্সন কমিট করলাম। ফলে আমার আগের ভার্সনটি হারিয়ে গেল। প্রোডাক্ট 2.0 রিলিজ করার পরে দেখা গেল সেখানে সমস্যা আছে। ফলে আমাকে আগের ভার্সনে ফেরত যেতে হবে। কিন্তু আমার আগের ভার্সনটি ওভাররাইট হয়ে গেছে।

এই ক্ষেত্রে গিট আমাদেরকে ২ টি ভার্সনেই পাশাপাশি কাজ করার সুযোগ করে দেয়। যেমন ধরুন আপনি যখন নতুন ভার্সন কমিট করবেন তখন আপনি একই ব্রাঞ্চ এ কমিট না করে নতুন ব্রাঞ্চ ব্যাবহার করতে পারেন। পাশাপাশি আপনি আগের ভার্সনেও কাজ চালিয়ে যেতে পারেন। যখন আপনি দেখেবেন আপনার নতুন ভার্সনে কোন অসুবিধা নেই তখন আপনি ২ টি ব্রাঞ্চ মার্জ করে ফেলতে পারেন। এই ধারনাটিকেই বলা হয় ট্রাঙ্ক বেজ ডেভেলপমেন্ট।
Trunk based development

সম্ভাব্য ইন্টার্ভিউ প্রশ্ন
  • ভার্সন কন্ট্রোল এর জন্য আপনি কি ব্যাবহার করেন? অথবা আপনার প্রোডাক্টের ভার্সন কিভাবে কন্ট্রোল করেন?
  • গিট কি?
  • গিট কিভাবে কাজ করে?
  • কেন আপনি গিট ব্যাবহার করেন?
  • সেন্ট্রালাইজড ভার্সন কন্ট্রোল সিস্টেম কি?
  • ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম কি?
  • ট্রাঙ্ক বেজড ডেভেলপমেন্ট কি?
  • রিপজিটরি কি ? লোকাল রিপজিটরি এবং রিমোট রিপজিটরি কি?
RSS
Facebook
Twitter
LinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *