গিট - এর চৌদ্দ গোষ্ঠী, পর্ব - ০১

গিট কি এবং কেন?

সহজ ভাষায় বলতে গেলে, গিট হল একটা ভার্সন ম্যানেজমেন্ট সিস্টেম বা ভার্সন কন্ট্রোল সিস্টেম। Linus Torvalds, Junio C Hamano - এই দুইজন ভদ্রলোক হলেন গিটের স্রষ্টা। গিট প্রথমে লিনাক্সের জন্য তৈরি হলেও এখন প্রায় সব গুলো অপারেটিং সিস্টেমে ব্যবহার যোগ্য। 


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


প্রথমে অনেকের মনে হয় গিট খুব কঠিন একটা বিষয়- শিখা অনেক কষ্টকর। আসলে সেরকম ভাবার কোন কারন নেই। প্রথমে দুই - তিনটা কমান্ড দিয়ে শুরু করলে বিষয়টা আস্তে আস্তে নিজের আয়ত্তে চলে আসবে। যেমন- add --all, commit, push, pull.  সাধারণত এই কয়েকটি কমান্ড দিয়েই আপনি গিট ভার্সনিং এর জগতে প্রবেশ করতে পারেন। তারপর আস্তে আস্তে সব কিছু নিজে নিজে শিখে যাবেন। এখানে add --all হল প্রজেক্টে যে কাজ গুলো করা হল সেগুলো গিটকে নটিফাই করে দেওয়া- যে গিট মামা, আমি নতুন এই কাজ করলাম- আপনি একটু নিজের ব্রেইনে নেওয়ার জন্য প্রস্তুত হয়ে যান, প্লিজ। এরপর commit হল আপডেটেট কাজ গুলো গিট সিস্টেমে লোকালি রেজিস্টার করে দেয়া। এর ফলে যে কোন সময় যে কোন তারিখের পুরোনো কাজের রিভিশন করতে সুবিধা হবে এবং কোন কোড হারানোর ভয় থাকবে না। আর push হল অফলাইন থেকে প্রোজেক্টের সোর্সকোড সহ অন্যান্য ফাইল অনলাইন সার্ভারে জমা রাখা। যেন প্রয়োজনে নামিয়ে নিয়ে কাজ করা যায়। একটি প্রোজেক্টে যখন মাল্টিপল ডেভেলপার কাজ করে, তখন কিন্তু সবাই অনলাইনে রাখার জন্য push কমান্ড ব্যবহার করে। কিন্তু যখন একজনের করা কাজ প্রোজেক্টে থাকা অন্য ডেভেলপারের প্রয়োজন হয় - তখন pull কমান্ড ব্যবহার করা হয়। pull কমান্ড ব্যবহার করে সবার কাজ সবাই দেখতে পারে ভিন্ন ভিন্ন জায়গা থেকে। মোটামুটি শুরুতে এই কয়েকটি কমান্ড দিয়েই গিট ব্যবহার করা যাবে। আস্তে আস্তে status, diff, log, show, reset, branch, checkout, merge, stash এই কমান্ড গুলো কাজে আসবে। এই কি-ওয়ার্ড গুলোর আগে git কি-ওয়ার্ডটি লিখতে হবে সব সময়।


STATUS হল প্রোজেক্টের বর্তমান অবস্থা চেক করা। যেমন - কোন কোন ফাইল এ কাজ করা হয়েছে, নতুন কোন কোন ফাইল ক্রিয়েট করা হয়েছে, কি কি ডিলিট করা হয়েছে, কোন ব্রাঞ্চে কাজ করা হইছে- সব আপডেট add, commit, push করা হয়েছে কিনা! এইসব জরুরি তথ্য STATUS  কমান্ডের মাধ্যমে গিট প্রদান করে থাকে। DIFF কমান্ড দিয়ে দুইটা COMMIT এর পার্থক্য দেখা যায়। আগের COMMIT এ কি কাজ করা হয়েছিল, আর লাস্ট COMMIT এ  কি কি কাজ করা হল। অর্থাৎ যেকোন দুইটা COMMIT এর পার্থক্য দেখতে DIFF কমান্ড ব্যবহার করা হয়। LOG কমান্ডের সাহায্যে প্রোজেক্টের শুরু থেকে করা সবগুলো কমিটের লিস্ট পাওয়া যায়। কোন তারিখে কি কি কাজ করা হয়েছিল- সব গুলো কাজের লিস্ট LOG  কমান্ডের মাধ্যমে এক মূহূর্তে চোখের সামনে হাজির হয়। 


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


যখন একটা প্রোজেক্টে একের অধিক ডেভেলপার বিভিন্ন ব্রাঞ্চে কাজ করে, তখন সব ব্রাঞ্চ গুলোর আপডেটেট কাজ এক জায়গায় নিয়ে আসার প্রয়োজন হয়। যেমন- একটা সাইট তৈরি করতে, একজনে কাজ করল Home পেইজ ডেভেলপ করতে, এভাবে এক এক জন About, Contact, Gallary ইত্যাদি পেইজে কাজ করছে ভিন্ন ভিন্ন ব্রাঞ্চে। এখন সাইটের সম্পূর্ণ কাজ শেষ হওয়ার পর সব গুলো ব্রাঞ্চ এক জায়গায় নিয়ে আসতে MERGE কমান্ডটি ব্যবহৃত হয়। আর STASH কমান্ড হল কোন কিছু মুছে ফেলার জন্য ব্যবহার করা হয়। ধরুন, একটা মেথড লিখা হল - পরে  মনে হচ্ছে মেথডটার আসলে কোন দরকার নাই। ঐ কোডটূকু মুছে ফেলার জন্যই  STASH কমান্ডটি ব্যবহৃত হয়ে থাকে। এটি অনেক দরকারি একটি কমান্ড। আমরা আগামী পর্ব গুলোতে বিস্তারিত জানব কমান্ডগুলো  সম্পর্কে।


গিটের এই পোস্টটি পড়ার জন্য আপনাদের অনেক অনেক ধন্যবাদ। যদি পোস্টে কোন ভূল হয়ে থাকে তাহলে কমেন্ট সেকশনে দয়াকরে  জানাবেন- আশা করি সংশোধন করতে সাহায্যের হাত বাড়িয়ে দেবেন।  

Comments

Popular posts from this blog

গুরুত্বপূর্ণ উবুন্টু লিনাক্স কমান্ড

মোবাইল অ্যাপস ডেভেলপিং এর আয়ের উৎস