ডেভেলপমেন্টের সময় গিট ব্যবহারের সহজ ওয়ার্ক-ফ্লো

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

০. আমরা ধরে নেই আমরা একটা ছোট দল, যেখানে নদু_ডেভ, যদু_ডেভ এবং গেদু_ডেভ ডেভেলপার হিসেবে কাজ করছে। এই দলের লিড বা কোড মেইনটেইনার হিসেবে কাজ করছে হালুম_লিড।
১. প্রজেক্টে গিট ব্যবহার করা হচ্ছে শুরু থেকেই। গিটে develop এবং master নামে দুটো ব্রাঞ্চ আছে
২. নদু, গেদু এবং যদু প্রজেক্টের develop ব্রাঞ্চ নিয়ে কাজ করছে। তাদের যার যার টাস্ক তারা এই develop ব্রাঞ্চে কমিট (git commit) দিবে এবং পুশ করবে। এছাড়াও তাদের নিজেদের কোড অন্যদের সাথে হালনাগাদ রাখার জন্য তারা সবসময় develop ব্রাঞ্চ থেকে পুল (git pull) নিবে। পুশ (git push) দেয়ার সময়ে তারা খেয়াল রাখবে যেন ব্রোকেন বা ইন-কমপ্লিট কোন কোড পুশ না হয়ে যায়।
৩. এখন মনে করি হালুম_লিড প্রজেক্টের একটা ফিচার নিয়ে নদুকে কাজ করতে দিয়েছে, ফিচার টার নাম “সহজ_ফিচার”। একই সাথে গেদুকে দেয়া হয়েছে অপেক্ষাকৃত ঝামেলার “মাঝারী_ফিচার”। যদুও পেয়েছে “ঝামেলা_ফিচার” তার ভাগে।
৪. যেহেতু অপেক্ষাকৃত সহজ এবং ছোট কাজ, নদু সরাসরি develop ব্রাঞ্চেই কাজ করতে পারে। কাজ শেষে সে কমিট এবং পুশ করবে develop ব্রাঞ্চে।
৫. একটু সময় বেশী লাগবে এবং পরীক্ষা নিরিক্ষা বেশী করা লাগবে দেখে গেদু তার মেশিনে develop ব্রাঞ্চ থেকে নতুন একটা ব্রাঞ্চ করে নিবে – ধরে নেই তার নাম “মাঝারী_ব্রাঞ্চ”। যদুও একই ভাবে কাজ করার সময় সরাসরি develop ব্রাঞ্চে কাজ না করে develop ব্রাঞ্চ থেকে নিজের মেশিনে একটা নতুন ব্রাঞ্চ করে নিবে “ঝামেলা_ব্রাঞ্চ” নামে। এই দুটি ব্রাঞ্চে তারা কমিট দিবে কিন্তু তারা কেউ এই ব্রাঞ্চদুটো পুশ করবে না।
৬. গেদুর কাজ হয়ে গেলে সে develop ব্রাঞ্চের সাথে তার মাঝারী_ব্রাঞ্চ মার্জ (git merge) করে দিবে। এক্ষেত্রে মার্জ করার আগে সে ড্রাই রান করে দেখে নিতে পারে যে কোন কনফ্লিক্ট হতে পারে কিনা। মার্জ করার পরে কনফ্লিক্ট হলে সে কনফ্লিক্ট রিসলভ (conflict resolve) করে আবার develop ব্রাঞ্চ কমিট এবং পুশ দিবে।
৭. যদুও তার কাজ হয়ে গেলে সে তার ঝামেলা_ব্রাঞ্চ একই ভাবে ডেভেলপ ব্রাঞ্চের সাথে মার্জ করে দিবে।
৮. develop ব্রাঞ্চের সাথে সফল ভাবে মার্জ হয়ে গেলে যদু এবং গেদু তাদের লোকাল ব্রাঞ্চ দুটো ডিলেট করে দিবে, কারন সেগুলোর আর প্রয়োজন নেই
৯. হালুম_লিড এখন চেক করবে যে develop ব্রাঞ্চের সব কিছু ঠিক আছে কিনা। যদি ঠিক থাকে তাহলে সে develop ব্রাঞ্চ master ব্রাঞ্চের সাথে মার্জ করে দিবে। এই মাস্টার ব্রাঞ্চে মার্জ কখনোই নদু_ডেভ, গেদু_ডেভ বা যদু_ডেভ করবে না।
১০. প্রোডাকশন সার্ভারে ডেপ্লয় করার সময় এলে হালুম_লিড দেখবে যে master ব্রাঞ্চের সব কোড ঠিকমত টেস্ট (ইউনিট টেস্ট) পাশ করছে কিনা। যদি টেস্ট পাশের হার অ্যাক্সেপ্টেবল হয় তাহলে সে সার্ভারে কোড ডেপ্লয় করে দিবে

এই হল মোটামুটি গিট নিয়ে কাজের ওয়ার্ক-ফ্লো। ১০ নম্বর পয়েন্ট টা অবশ্য গিটের সাথে সম্পর্কিত না, তাও উল্লেখ করলাম আর কি