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

গিট

গিট হচ্ছে ভার্সন কন্ট্রোল সিস্টেম।  ডেভেলপাররা সাধারণত প্রজেক্টের ভার্সন কন্ট্রোল এবং একই প্রজেক্টে একের অধিক ডেভেলপার কাজ করার জন্য গিট ব্যবহার করে। গিট দিয়ে বড়ো সড়ো প্রজেক্ট গুলো কন্ট্রোল করা হয়।

গিটহাব

গিটহাব হচ্ছে কোড হোস্ট করার একটা সাইট। সাধারণত ওপেন সোর্স প্রজেক্ট গুলো গিটহাবে হোস্ট করে অন্যান্য ডেভেলপারদের সাথে শেয়ার করে। এতে পৃথিবীর যে কোন জায়গা থেকে যে কেউ যে কোন প্রজেক্টে কাজ করতে পারে।

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

গিট ইন্সটল

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

নিচের লিঙ্ক এ গিয়ে  উইন্ডোজের জন্য গিট ডাউনলোড করে নিব। এরপর ইন্সটল। ম্যাক বা লিনাক্সের জন্যও নিচের লিঙ্ক থেকে ডাউনলোড করা যাবে।

http://git-scm.com/

গিট ইন্সটল করার পর পাথ সেটিং এ গিয়ে গিট এর পাথ যুক্ত করতে হবে। যেমন   C:\Program Files (x86)\Git\cmd

তার জন্য Control Panel থেকে System এ ক্লি করতে হবে। System থেকে Advance System সেটিং এ ক্লিক করতে হবে। এরপর Environment Variable এ ক্লিক করতে হবে। ঐখান থেকে User Variable থেকে path এ ক্লিক করে Edit করতে হবে। এবং গিটের cmd পাথ যুক্ত করে দিতে হবে। ঠিক মত সেট করা হয়েছে কিনা, তা জন্য কমান্ড লাইন ওপেন করে git লিখলে যদি গিট সম্পর্কিত তথ্য দেখায়, তাহলে বুঝতে হবে ঠিক মত পাথ সেট করা হয়েছে।

গিট ইন্সটল করার পর আমাদের ইমেইল এবং নাম সেট করতে হবে। তার জন্য নিচের দুইটা কমান্ড লিখতে হবেঃ

123git config --global user.name "Your Name" git config --global user.email"Your Email"

ইউজার নেম এবং ইমেইল ঠিক মত সেট আপ করা হয়েছে কিনা, তা দেখতে চাইলে কমান্ড লাইন বা টারমিনালে নিচের কমান্ড লিখলে দেখাবেঃ

123git config --global user.name git config --global user.email

গিটহাব এ একটা প্রজেক্ট পুশ করা

এবার আমরা একটা প্রজেক্ট তৈরি করতে পারি। এবং তা গিটহাব github.com  এ আপলোড করতে পারি। তার জন্য গিটহাবে একটা একাউন্ট খুলে নিব। একাউন্ট খোলার পর লগিন করব। + সাইনে ক্লিক করে New Repository তে ক্লিক করব। বলে রাখা ভালো যে গিট এবং গিটহাব দুইটা ভিন্ন জিনিস। একটা হচ্ছে ভার্সন কন্ট্রোল সিস্টেম। আরেকটা হচ্ছে হোস্টিং। হিটহাব গিটপ্রজেক্ট গুলো হোস্ট করে।

create repository

এরপর একটা নাম দিয়ে রিপোজিটোরি তৈরি করে নিব।

রিপোজিটোরি তৈরি করার পর আমারা কিভাবে একটা প্রজেক্ট পুশ করতে পারি, তার গিট কমান্ড গুলো দেখাবে। নিচের মত করেঃ

git push command

এখন আমরা একটি প্রজেক্ট তৈরি করব। যেটা আমরা গিটহাবে পুশ/আপলোড করব। যেমন ডেস্কটপে একটা ফোল্ডার তৈরি করি। git-push-demo নামে। ফোল্ডারের ভেতর যে কোন ধরনের কোড লিখি। C, Java, C++, PHP, C# যা ইচ্ছে তাই। আমি শুধু ডেমো হিসেবে একটা HTML ফাইল তৈরি করব। index.html নামে। তার ভেতরে শুধু লিখছি <h1>Hello World!</h1> আমরা চাইলে আমাদের যে কোন প্রজেক্টই আপলোড করতে পারি।

git-push-demo ফোল্ডারে আমাদের গিট Initialize করতে হবে। তার জন্য কমান্ড লাইনে যাবো। তারপর ডিরেক্টোরি পরিবর্তন করে  git-push-demo  এ আসব। তার জন্য লিখতে হবেঃ

1cd git-push-demo

এরপর গিট ইনিশিয়ালাইজ করার জন্য লিখবঃ

1git init

তাহলে আমাদের  git-push-demo ফোল্ডারে একটা লোকাল গিট রিপোজিটোরি তৈরি হবে। এবার কাজ হচ্ছে আমাদের এই রিপোজিটোরিতে আমাদের প্রজেক্টের ফাইল গুলো যুক্ত করা। তার জন্য লিখবঃ

1git add .

git add . মানে হচ্ছে সব গুলো ফাইল গিট রিপোজিটোরিতে যুক্ত করা। আমাদের প্রজেক্টে মাত্র একটা ফাইল রয়েছে। তাই একটাই যুক্ত হবে।

এড করার পর commit করব। তার জন্য লিখবঃ

1git commit -m "first commit"

এবার আমরা এ প্রজেক্টটি গিটহাবে পুশ করার জন্য প্রস্তুত। গিটহাবে যেখানে আমরা পুশ করব, তাকে বলে রিমোট রিপোজিটোরি। লোকাল রিপোজিটোরি থেকে রিমোটে পুশ করার জন্য আগে আমাদের রিমোট রিপোজিটোরির URL টা যুক্ত করতে হবে। প্রত্যেকটা গিটহাব প্রজেক্টের জন্য একটা করে url পাবো। যেমন আমাদের git-push-demo https://github.com/jakirseu/git-push-demo.git । jakirseu হচ্ছে আমার ইউজার নেম। রিমোট রিপোজিটোরি যুক্ত করার জন্য লিখতে হবেঃ

1git remote add origin https://github.com/jakirseu/git-push-demo.git

এরপর পুশ করব। তার জন্য লিখতে হবেঃ

1git push -u origin master

এই বার আমাদের গিটহাবের ইউজার নেম চাইবে। এরপর চাইবে পাসওয়ার্ড। পাসওয়ার্ড দিয়ে এন্টার চাপলে আমাদের প্রজেক্টটি গিটহাবে আপলোড হয়ে যাবে। সব কিছু ঠিক মত হলে সাকসেস মেসেজ দেখাবে।

এবং গিটহাবে গিয়ে রিপোজিটোরিতে আমাদের প্রজেক্টে দেখতে পাবো।

আমাদের প্রজেক্টে মাত্র একটি ফাইল ছিল, index.html তাই দেখাচ্ছে।

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

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

1git clone https://github.com/jakirseu/git-push-demo.git

আর একটা বিষয়! পুল। সার্ভার থেকে নিজ ফোল্ডারে প্রজেক্ট ডাউনলোড করার জন্য বা নিজ লোকাল প্রজেক্ট আপডেট করার জন্য ব্যবহার করা হয় pull

1git pull https://github.com/jakirseu/git-push-demo.git

আমরা কিছু কাজ করেছি, তা অদরকারি। সে কাজ গুলো কমিট করতে চাচ্ছি না। সে কাজ গুলো ফেলে দেওয়ার জন্য লিখতে পারিঃ

1git stash

আমরা ভুলে কিছু লিখে ফেলার পর তা রিমুভ করে দিতে উপরের কমান্ডটি ব্যবহার করতে পারি।

Git Branching & Merging:

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

নতুন একটা ব্রাঞ্চ তৈরি করার জন্য লিখতে হয়:

1git branch branch_name

সিম্পল একটা ধারণা দিচ্ছি। যেমন যদি আমরা একটা ওয়েব সাইট তৈরি করি। তখন একজন কাজ করে হোম পেইজ নিয়ে। আরেকজন কাজ করে about পেইজ নিয়ে। তখন যে হোমে কাজ করে, সে home নামে একটা ব্রাঞ্চ তৈরি করে নিবে। আর যে about এ কাজ করে, সে about নামে একটা ব্রাঞ্চ তৈরি করে নিবে।

git এ ডিফল্ট ব্রাঞ্চ একটা তৈরি থাকে, তা হচ্ছে master। একটা ব্রাঞ্চ তৈরি করার পর master ব্রাঞ্চ থেকে ঐ ব্রাঞ্চে সুইচ করতে হয়। ব্রাঞ্চ তৈরি করার পর ঐ ব্রাঞ্চে সুইচ করার জন্য লিখতে হয়ঃ

1git checkout branch_name

ব্রাঞ্চ করে একজন আবার একই ফাইলেই কাজ করতে পারে। যেমন আমাদের home পেইজ অনেক কমপ্লেক্স। কেউ একজন কাজ করে menu নিয়ে। কেউ একজন কাজ করে sidebar নিয়ে। এখন দুইজন ডেভেলপার একই ফাইলেই কাজ করতে হবে। এ জন্য তারা দুইজন দুইটা ব্রাঞ্চ তৈরি করে নিবে। যেমন menu এবং sidebar। দুইজন দুইটা ব্রাঞ্চে থাকলে কেউ কারো কোড দেখবে না। এরপর দুইজনের কাজ হয়ে যাওয়ার পর আমরা দুইটি ব্রাঞ্চ মার্জ করে নিলেই menu এবং sidebar এক সাথ হয়ে যাবে।

ডেভেলপারদের home এবং about দুইটা পেইজ তৈরি হয়ে গেলে বা menu এবং sidebar এর কাজ হয়ে গেলে আমরা ব্রাঞ্চ গুলো মার্জ করে নিব। মার্জ করে এভাবেঃ

1git merge branch_name

যেমন আমরা master ব্রাঞ্চের সাথে প্রথমে home ব্রাঞ্চটা মার্জ করব। তার জন্য প্রথমে master ব্রাঞ্চে যাবো, লিখতে হবে git checkout master। তারপর লিখব git merge home. এরপর আবার about ব্রাঞ্চ master ব্রাঞ্চ এর সাথে মার্জ করব। তার জন্য লিখব git merge about

তাহলে আমাদের সকল কাজ master এর সাথে মার্জ হয়ে যাবে। এভাবে আমরা একটা প্রজেক্টে যত ইচ্ছে তত গুলো ব্রাঞ্চ তৈরি করতে পারি। ব্রাঞ্চ লিস্ট গুলো দেখার জন্যঃ

1git branch

আমরা যে ব্রাঞ্চে রয়েছি, তার পাশে স্টার চিহ্ন দেখাবে। কোন স্ট্যাটাস বা কোন ব্রাঞ্চে রয়েছি, তা জানতে লিখবঃ

1git status

একটা ব্রাঞ্চের কাজ শেষ। মূল প্রজেক্টের সাথে মার্জ করার পর আমরা চাইলে ঐ ব্রাঞ্চ ডিলেট করে দিতে পারি। ডিলেট করার জন্য লিখতে হয়ঃ

1git branch -d branch_name

যেমন আমরা about ব্রাঞ্চ ডীলেট করার জন্য লিখবঃ

1git branch -d about

গিটহাব বা অন্য কোন রিমোট সাইটে যদি আমরা আমাদের প্রজেক্ট আপলোড করি, এবং ঐ রিমোট সাইট থেকেও যদি আমরা আমাদের ব্রাঞ্চ ডিলেট করতে চাই, তাহলে লিখতে হবেঃ

123git push origin --delete branch_nameorgit push origin : branch_name

গিটহাব হচ্ছে পাবলিক গিট প্রজেক্ট হোস্ট। আমরা যদি সিক্রেট কোন প্রজেক্টে কাজ করি, আমরা প্রজেক্ট গুলো কোথায় হোস্ট করব? হ্যা, তার জন্য প্রাইভেট গিট প্রজেক্ট হোস্ট রয়েছে। গিটহাবেও প্রাইভেট রিপোজিটোরি তৈরি করা যায়। তার জন্য মাসে মাসে ৳ গুনতে হয়। ফ্রি প্রাইভেট রিপোজিটোরি অনেক রয়েছে, তার মধ্যে সেরা একটা হচ্ছে bitbucket

এখানে প্রাইভেট রিপোজিটোরি তৈরি করা যাবে। নিজের টিম যুক্ত করা যাবে। ইত্যাদি ইত্যাদি…

গিট শেখার অন্যান্য রিসোর্স

গিট দিয়ে অনেক কমপ্লেক্স প্রজেক্ট ম্যানেজ করা যায়। শিখতে তো হবে, তাই না? শুরু করা যেতে পারে নিচের লিঙ্ক থেকেঃ

গুগল করলে আরো অনেক টিউটোরিয়াল পাওয়া যাবে। আস্তে আস্তে শিখলে একটা ভালো স্কিল তৈরি হবে। এরপর গিট ছাড়া কোন প্রজেক্ট তৈরি করতেই ইচ্ছে করবে না।

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

এ ছাড়া কারো কাছে টারমিনাল বা কমান্ড লাইন কমপ্লেক্স মনে হলে SourceTree ব্যবহার করতে পারেন। ট্রাই গিট থেকে গিটের দরকারি কমান্ড গুলো সহজে শেখা যাবে।

Article Credit and Research: https://jakir.me , https://medium.com