গিট
গিট হচ্ছে ভার্সন কন্ট্রোল সিস্টেম। ডেভেলপাররা সাধারণত প্রজেক্টের ভার্সন কন্ট্রোল এবং একই প্রজেক্টে একের অধিক ডেভেলপার কাজ করার জন্য গিট ব্যবহার করে। গিট দিয়ে বড়ো সড়ো প্রজেক্ট গুলো কন্ট্রোল করা হয়।
গিটহাব
গিটহাব হচ্ছে কোড হোস্ট করার একটা সাইট। সাধারণত ওপেন সোর্স প্রজেক্ট গুলো গিটহাবে হোস্ট করে অন্যান্য ডেভেলপারদের সাথে শেয়ার করে। এতে পৃথিবীর যে কোন জায়গা থেকে যে কেউ যে কোন প্রজেক্টে কাজ করতে পারে।
মাইক্রোসফট ওয়ার্ডে লেখার সময় Ctrl Z ব্যবহার করেছি না? গিট ব্যবহার করলে প্রোজেক্ট তৈরির সময় এই সুবিধেটি পাওয়া যায়। যেমন আমরা একটা প্রজেক্টে অনেক গুলো ফিচার যুক্ত করেছি। তো কম্পিউটার তো মনে রাখবে না কোন কোন ফিচার যুক্ত করেছি, কোন দিন কোন ফিচার যুক্ত করেছি। কোড লিখতে লিখতে আমাদের মনে হলো তিন দিন আগে যে ফিচারটি যুক্ত করেছি, সেটিই ভালো ছিল। এরপরের ফিচার গুলোতে সমস্যা। প্রজেক্টের তিন দিন আগের কোড গুলো ফিরে ফেতে হবে, তখন কি হবে? আবার আপনি যে ফাইলে কাজ করে, সে ফাইলে অন্য ডেভেলপারেরও কাজ করতে হবে। কিন্তু কিভাবে করবেন? কে কোন কোড গুলো লিখেছে, কোন কোডের পর কোন কোড হবে, এগুলো কিভাবে ম্যানেজ করা যাবে? এরকম সমস্যা গুলো সমাধান করার জন্যই গিট।
গিট ইন্সটল
এখানে আমরা জানব কিভাবে গিট ইন্সটল করা যায়, ব্যাসিক গিট কমান্ড। গিট কিভাবে গিটহাবে একটা প্রজেক্ট আপলোড বা পুশ করা যায়। কিভাবে ক্লোন করা যায়, ইত্যাদি।
নিচের লিঙ্ক এ গিয়ে উইন্ডোজের জন্য গিট ডাউনলোড করে নিব। এরপর ইন্সটল। ম্যাক বা লিনাক্সের জন্যও নিচের লিঙ্ক থেকে ডাউনলোড করা যাবে।
গিট ইন্সটল করার পর পাথ সেটিং এ গিয়ে গিট এর পাথ যুক্ত করতে হবে। যেমন C:\Program Files (x86)\Git\cmd
তার জন্য Control Panel থেকে System এ ক্লি করতে হবে। System থেকে Advance System সেটিং এ ক্লিক করতে হবে। এরপর Environment Variable এ ক্লিক করতে হবে। ঐখান থেকে User Variable থেকে path এ ক্লিক করে Edit করতে হবে। এবং গিটের cmd পাথ যুক্ত করে দিতে হবে। ঠিক মত সেট করা হয়েছে কিনা, তা জন্য কমান্ড লাইন ওপেন করে git লিখলে যদি গিট সম্পর্কিত তথ্য দেখায়, তাহলে বুঝতে হবে ঠিক মত পাথ সেট করা হয়েছে।
গিট ইন্সটল করার পর আমাদের ইমেইল এবং নাম সেট করতে হবে। তার জন্য নিচের দুইটা কমান্ড লিখতে হবেঃ
git config --global user.name "Your Name"
git config --global user.email"Your Email"
ইউজার নেম এবং ইমেইল ঠিক মত সেট আপ করা হয়েছে কিনা, তা দেখতে চাইলে কমান্ড লাইন বা টারমিনালে নিচের কমান্ড লিখলে দেখাবেঃ
git config --global user.name
git config --global user.email
গিটহাব এ একটা প্রজেক্ট পুশ করা
এবার আমরা একটা প্রজেক্ট তৈরি করতে পারি। এবং তা গিটহাব github.com এ আপলোড করতে পারি। তার জন্য গিটহাবে একটা একাউন্ট খুলে নিব। একাউন্ট খোলার পর লগিন করব। + সাইনে ক্লিক করে New Repository তে ক্লিক করব। বলে রাখা ভালো যে গিট এবং গিটহাব দুইটা ভিন্ন জিনিস। একটা হচ্ছে ভার্সন কন্ট্রোল সিস্টেম। আরেকটা হচ্ছে হোস্টিং। হিটহাব গিটপ্রজেক্ট গুলো হোস্ট করে।
এরপর একটা নাম দিয়ে রিপোজিটোরি তৈরি করে নিব। রিপোজিটরি তৈরি করার সময় Add a README file এই অপশনটা আনচেক অবস্থায় রাখব। রিডমি ফাইল রিপোজিটোরি তৈরি করার সময় তৈরি করলে বাড়তি কিছু কমান্ড সম্পর্কে জানতে হবে। যেগুলো আমরা পরবর্তীতে আস্তে আস্তে জানতে পারব।
রিপোজিটোরি তৈরি করার পর আমারা কিভাবে একটা প্রজেক্ট পুশ করতে পারি, তার গিট কমান্ড গুলো দেখাবে। নিচের মত করেঃ
এখন আমরা একটি প্রজেক্ট তৈরি করব। যেটা আমরা গিটহাবে পুশ/আপলোড করব। যেমন ডেস্কটপে একটা ফোল্ডার তৈরি করি। git-push-demo নামে। ফোল্ডারের ভেতর যে কোন ধরনের কোড লিখি। C, Java, C++, PHP, C# যা ইচ্ছে তাই। আমি শুধু ডেমো হিসেবে একটা HTML ফাইল তৈরি করব। index.html নামে। তার ভেতরে শুধু লিখছি <h1>Hello World!</h1> আমরা চাইলে আমাদের যে কোন প্রজেক্টই আপলোড করতে পারি।
git-push-demo ফোল্ডারে আমাদের গিট Initialize করতে হবে। তার জন্য কমান্ড লাইনে যাবো। তারপর ডিরেক্টোরি পরিবর্তন করে git-push-demo এ আসব। তার জন্য লিখতে হবেঃ
cd git-push-demo
এরপর গিট ইনিশিয়ালাইজ করার জন্য লিখবঃ
git init
তাহলে আমাদের git-push-demo ফোল্ডারে একটা লোকাল গিট রিপোজিটোরি তৈরি হবে। এবার কাজ হচ্ছে আমাদের এই রিপোজিটোরিতে আমাদের প্রজেক্টের ফাইল গুলো যুক্ত করা। তার জন্য লিখবঃ
git add .
git add . মানে হচ্ছে সব গুলো ফাইল গিট রিপোজিটোরিতে যুক্ত করা। আমাদের প্রজেক্টে মাত্র একটা ফাইল রয়েছে। তাই একটাই যুক্ত হবে।
এড করার পর commit করব। তার জন্য লিখবঃ
git commit -m &amp;amp;quot;first commit&amp;amp;quot;
এবার আমরা এ প্রজেক্টটি গিটহাবে পুশ করার জন্য প্রস্তুত। গিটহাবে যেখানে আমরা পুশ করব, তাকে বলে রিমোট রিপোজিটোরি। লোকাল রিপোজিটোরি থেকে রিমোটে পুশ করার জন্য আগে আমাদের রিমোট রিপোজিটোরির URL টা যুক্ত করতে হবে। প্রত্যেকটা গিটহাব প্রজেক্টের জন্য একটা করে url পাবো। যেমন আমাদের git-push-demo https://github.com/jakirseu/git-push-demo.git । jakirseu হচ্ছে আমার ইউজার নেম। রিমোট রিপোজিটোরি যুক্ত করার জন্য লিখতে হবেঃ
git remote add origin https://github.com/jakirseu/git-push-demo.git
এরপর পুশ করব। তার জন্য লিখতে হবেঃ
git push -u origin main
এই বার আমাদের গিটহাবের ইউজার নেম চাইবে। এরপর চাইবে পাসওয়ার্ড। পাসওয়ার্ডের যায়গায় এক্সেস টোকেন দিতে হবে। এক্সেস টোকেন পাওয়া যাবে Settings > Developer Settings > Personal access tokens > Fine-grained tokens এ ক্লিক করে এক্সেস টোকেন জেনারেট করে নেওয়া যাবে। এক্সেস টোকেন জেনারেট করার সময় Repository access অপশন থেকে All repositories সিলেক্ট করে দিলে বার বার এক্সেস টোকেন তৈরি করতে হবে না। একটা এক্সেস টোকেন দিয়েই সব গুলো রিপোজিটোরি এক্সেস করা যাবে।
ইউজারনেম এবং পাসওয়ার্ডের জায়গায় এক্সেস টোকেন ব্যবহার করার পর এন্ট্রার প্রেস করলে সব রিমোট ব্রাঞ্চে ফাইল গুলো আপলোড হয়ে যাবে। এবং গিটহাবে গিয়ে রিপোজিটোরিতে আমাদের প্রজেক্টে দেখতে পাবো।
আমাদের প্রজেক্টে মাত্র একটি ফাইল ছিল, index.html তাই দেখাচ্ছে।
নিজে নিজে বা কোন টিমের সাথে বড় প্রজেকেটে কাজ করার জন্য গিটে ব্যবহার জানা খুবি দরকারি। উপরে শুধু গিটের ব্যাসিক ব্যবহার দেখানো হয়েছে। কিভাবে গিট রিপো তৈরি করতে হয়, গিটে কমিট করতে হয়, কিভাবে গিটহাবে একটা প্রজেকট পুশ করতে হয়। ইত্যাদি।
মনে করি আমরা আমাদের লোকালে রাকা, মানে ডেস্কটপে রাখা প্রজেকটি ভুলে ডিলেট করে ফেলছি। এখন কি করব? গিটহাবে যেহেতু আমাদের প্রজেক্টটি রয়েছে, আমরা সহজেই গিট হাব থেকে ডাউনলোড করে নিতে পারি। Zip আকারে ডাউনলোড করে নেওয়া যাবে। আমরা চাইলে গিট দিয়ে ক্লোন করে নিতে পারি। তাহলে আমাদের প্রজেক্টের একটা কপি আবার লোকালে তৈরি হয়ে যাবেঃ
git clone https://github.com/jakirseu/git-push-demo.git
আর একটা বিষয়! পুল। সার্ভার থেকে নিজ ফোল্ডারে প্রজেক্ট ডাউনলোড করার জন্য বা নিজ লোকাল প্রজেক্ট আপডেট করার জন্য ব্যবহার করা হয় pull
git pull https://github.com/jakirseu/git-push-demo.git
আমরা কিছু কাজ করেছি, তা অদরকারি। সে কাজ গুলো কমিট করতে চাচ্ছি না। সে কাজ গুলো ফেলে দেওয়ার জন্য লিখতে পারিঃ
git stash
আমরা ভুলে কিছু লিখে ফেলার পর তা রিমুভ করে দিতে উপরের কমান্ডটি ব্যবহার করতে পারি।
Git Branching & Merging:
গিটের উপরের কাজ গুলো সিম্পল। একজন একটি প্রজেক্টে একজন ডেভেলপার কাজ করলে সাধারণত উপরের কমান্ড গুলো বেশি ব্যবহৃত হয়। কিন্তু টিমে কাজ করলে আরো কিছু কমান্ড জানা লাগে। কারণ যখন আমরা টিমে কাজ করি, তখন একই প্রজেক্টে অনেক জন ডেভেলপার এক সাথে কাজ করি। দেখা যায় এক জন এক এক ফিচারে কাজ করে। আর এ থেকেই এসেছে Branch এর ধারণা। এক এক জন এক এক ব্রাঞ্চে কাজ করে। আবার যখন এক একটা ফিচার এর কাজ কমপ্লিট হয়ে যায়, তখন সব কিছু আবার তা মূল প্রজেক্টের সাথ যুক্ত করতে হয়। একে বলা হয় Merge।
নতুন একটা ব্রাঞ্চ তৈরি করার জন্য লিখতে হয়:
git branch branch_name
সিম্পল একটা ধারণা দিচ্ছি। যেমন যদি আমরা একটা ওয়েব সাইট তৈরি করি। তখন একজন কাজ করে হোম পেইজ নিয়ে। আরেকজন কাজ করে about পেইজ নিয়ে। তখন যে হোমে কাজ করে, সে home নামে একটা ব্রাঞ্চ তৈরি করে নিবে। আর যে about এ কাজ করে, সে about নামে একটা ব্রাঞ্চ তৈরি করে নিবে।
git এ ডিফল্ট ব্রাঞ্চ একটা তৈরি থাকে, তা হচ্ছে main। একটা ব্রাঞ্চ তৈরি করার পর main ব্রাঞ্চ থেকে ঐ ব্রাঞ্চে সুইচ করতে হয়। ব্রাঞ্চ তৈরি করার পর ঐ ব্রাঞ্চে সুইচ করার জন্য লিখতে হয়ঃ
git checkout branch_name
ব্রাঞ্চ করে একজন আবার একই ফাইলেই কাজ করতে পারে। যেমন আমাদের home পেইজ অনেক কমপ্লেক্স। কেউ একজন কাজ করে menu নিয়ে। কেউ একজন কাজ করে sidebar নিয়ে। এখন দুইজন ডেভেলপার একই ফাইলেই কাজ করতে হবে। এ জন্য তারা দুইজন দুইটা ব্রাঞ্চ তৈরি করে নিবে। যেমন menu এবং sidebar। দুইজন দুইটা ব্রাঞ্চে থাকলে কেউ কারো কোড দেখবে না। এরপর দুইজনের কাজ হয়ে যাওয়ার পর আমরা দুইটি ব্রাঞ্চ মার্জ করে নিলেই menu এবং sidebar এক সাথ হয়ে যাবে।
ডেভেলপারদের home এবং about দুইটা পেইজ তৈরি হয়ে গেলে বা menu এবং sidebar এর কাজ হয়ে গেলে আমরা ব্রাঞ্চ গুলো মার্জ করে নিব। মার্জ করে এভাবেঃ
git merge branch_name
যেমন আমরা main ব্রাঞ্চের সাথে প্রথমে home ব্রাঞ্চটা মার্জ করব। তার জন্য প্রথমে main ব্রাঞ্চে যাবো, লিখতে হবে git checkout main। তারপর লিখব git merge home. এরপর আবার about ব্রাঞ্চ main ব্রাঞ্চ এর সাথে মার্জ করব। তার জন্য লিখব git merge about
তাহলে আমাদের সকল কাজ main এর সাথে মার্জ হয়ে যাবে। এভাবে আমরা একটা প্রজেক্টে যত ইচ্ছে তত গুলো ব্রাঞ্চ তৈরি করতে পারি। ব্রাঞ্চ লিস্ট গুলো দেখার জন্যঃ
git branch
আমরা যে ব্রাঞ্চে রয়েছি, তার পাশে স্টার চিহ্ন দেখাবে। কোন স্ট্যাটাস বা কোন ব্রাঞ্চে রয়েছি, তা জানতে লিখবঃ
git status
একটা ব্রাঞ্চের কাজ শেষ। মূল প্রজেক্টের সাথে মার্জ করার পর আমরা চাইলে ঐ ব্রাঞ্চ ডিলেট করে দিতে পারি। ডিলেট করার জন্য লিখতে হয়ঃ
git branch -d branch_name
যেমন আমরা about ব্রাঞ্চ ডীলেট করার জন্য লিখবঃ
git branch -d about
গিটহাব বা অন্য কোন রিমোট সাইটে যদি আমরা আমাদের প্রজেক্ট আপলোড করি, এবং ঐ রিমোট সাইট থেকেও যদি আমরা আমাদের ব্রাঞ্চ ডিলেট করতে চাই, তাহলে লিখতে হবেঃ
git push origin --delete branch_name
or
git push origin : branch_name
গিটহাব হচ্ছে পাবলিক গিট প্রজেক্ট হোস্ট। আমরা যদি সিক্রেট কোন প্রজেক্টে কাজ করি, আমরা প্রজেক্ট গুলো কোথায় হোস্ট করব? হ্যা, তার জন্য প্রাইভেট গিট প্রজেক্ট হোস্ট রয়েছে। গিটহাবেও প্রাইভেট রিপোজিটোরি তৈরি করা যায়। তার জন্য মাসে মাসে ৳ গুনতে হয়। ফ্রি প্রাইভেট রিপোজিটোরি অনেক রয়েছে, তার মধ্যে সেরা একটা হচ্ছে bitbucket
এখানে প্রাইভেট রিপোজিটোরি তৈরি করা যাবে। নিজের টিম যুক্ত করা যাবে। ইত্যাদি ইত্যাদি…
গিট শেখার অন্যান্য রিসোর্স
গিট দিয়ে অনেক কমপ্লেক্স প্রজেক্ট ম্যানেজ করা যায়। শিখতে তো হবে, তাই না? শুরু করা যেতে পারে নিচের বই দিয়েঃ
এছাড়া অনলাইন থেকে এই টিউটোরিয়াল দেখেও শিখতে পারেন।
গুগল করলে আরো অনেক টিউটোরিয়াল পাওয়া যাবে। আস্তে আস্তে শিখলে একটা ভালো স্কিল তৈরি হবে। এরপর গিট ছাড়া কোন প্রজেক্ট তৈরি করতেই ইচ্ছে করবে না।
এই গুলো জানলেই মোটামুটি যে কোন ছোট বড় প্রজেক্টে কাজ করা যাবে। গিট ব্রাঞ্চিং এবং মার্জিং নিয়ে আরেকটু বিস্তারিত জানতে নিচের লেখা দুইটি বা গুগলে সার্চ করে নিজের পছন্দ মত সাইট থেকে শিখে নেওয়া যাবেঃ
এ ছাড়া কারো কাছে টারমিনাল বা কমান্ড লাইন কমপ্লেক্স মনে হলে SourceTree ব্যবহার করতে পারেন। ট্রাই গিট থেকে গিটের দরকারি কমান্ড গুলো সহজে শেখা যাবে।
গিটহাবে readme ফাইল
গিটহাবে অনেক রিপোজিটরে গেলে দেখি যে সুন্দর করে প্রজেক্ট সম্পর্কে বিস্তারিত লেখা। ইমেজ ভিডিও এড করা? এগুলো থাকে readme ফাইলে। রিপোজিটোরি তৈরি করার সময় আমরা বলে দিতে পারি একটা readme ফাইল তৈরি করতে। অথবা পরে নিজে করে নিতে পারি।
গিটহাবে রিপোজিটির মেইন পেইজ থেকেই এই readme ফাইলটি এডিট করা যায়। আর এখানে লিখতে হয় মার্কডাউনে। মার্কডাউন সম্পর্কে ধারণা না থাকলেও সমস্যা নেই। কমপ্লিকেটেড কিছু না, এখান থেকে ব্যাসিক মার্কডাউন শিখে নিতে পারেন। চাইলে আমরা যে কোন মার্কডাউন এডিটর ব্যবহার করে লিখে এই readme ফাইলে পেস্ট করতে পারি। তাহলে যে কেউ আমাদের রিপোজিটোরিতে আসলে প্রজেক্টটা কিসের, তা সম্পর্কে বিস্তারিত ধারনা পেয়ে যাবে।
এই সম্পর্কিত অন্যান্য লেখা গুলোঃ
খুব ভালো লাগলো। এরকম একটা আর্টিক্যালই এতোদিন যাবৎ খুজছিলাম।
ভাইয়া খুব ভাল লাগছে,,, তাই এর উপর আরো কিছু লিখলে কুব উপকৃত হতাম,,,,
Administrator vai, onek sundor ekta post share korlen. Ami to programing janina. jokhon shikbo tokhon Insha’Allah eta kaje dibe.
ধন্যাবাদ জাকির ভাই আমি গুগলে গিটহাব সম্পর্কে অনেক খোঁজা খুঁজি করেছি বাট কিছুই পাইনি আর পেলেও ভালো বুঝিনি৷ আপনার এই পোষ্টটা পড়ে সত্যি আমি এখন কিছুটা বুঝতে পেরেছি ৷
আপনি আরো এ্যাডভান্স টিউটোরিয়াল পোষ্ট দিবেন ৷আমার জন্য এই সাইট টি অনেক উপকারী৷
আবশেষে বলি ধন্যবাদ আপনাকে ৷
I LOVE YOU BROTHER
আপনার পোষ্টটি পড়ে ভালো লাগলো।
আপনার পোষ্টটি পড়ে ভালো লাগলো। অতি অল্প কথনে গিট সম্পকে ধারনা পেলাম। ভবিষ্যৎ এ আরো দরকারি পোষ্ট পাবো সেই আশা রাখি।
git initialize korte parlam na 🙁
very nice post
অসাধারন লিখেছেন । ধন্যবাদ স্যার
Many many thanks.
খুব দরকারি পোস্ট। ভাল লাগল।
“git push -u origin master” — didn’t work. I had to use “git push -f origin master”. Why?
আচ্ছা ভাই আমি যদি মোবাইল দিয়ে গিট ব্যবহার করতে চাই পারবো?
Termux ইন্সটল করুন, পারবেন।