শনিবার, ৬ জুলাই, ২০১৯

এক পলকে গিট (Git) ও গিটহাব (GitHub)

                                

         এক পলকে গিট (Git) ও গিটহাব


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


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

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


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