তুলনা

Git ও GitHub: পার্থক্য কী এবং কীভাবে যুক্ত

হালনাগাদ: · Skillaria.Top

Git হলো আপনার কম্পিউটারে চলা ভার্সন কন্ট্রোল প্রোগ্রাম, যা প্রকল্পের ইতিহাস রাখে। GitHub হলো ক্লাউড সার্ভিস, যেখানে Git রিপোজিটরি রাখা হয় এবং যা pull request, কোড রিভিউ, টাস্ক ও CI-এর মতো দলগত সরঞ্জাম যোগ করে। Git ছাড়া চলে, কিন্তু GitHub Git ছাড়া চলে না।

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

Git কী

Git একটি ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম। এটি তৈরি করেন Linus Torvalds ২০০৫ সালে Linux কার্নেলের উন্নয়নের জন্য, এবং তারপর থেকে এটি শিল্পের মানদণ্ড হয়ে উঠেছে। Git সম্পূর্ণ লোকালি চলে: ইতিহাস প্রকল্পের ভেতরে .git নামের লুকানো ফোল্ডারে থাকে, এবং বেশিরভাগ কাজে ইন্টারনেট লাগে না।

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

Git নিজে যা পারে:

  • কমিট দিয়ে পরিবর্তন রেকর্ড করা: লেখক, তারিখ ও বিবরণসহ প্রকল্পের স্ন্যাপশট;
  • কে, কখন, কেন কোনো লাইন বদলেছে তা দেখানো (git log, git blame);
  • ব্রাঞ্চে সমান্তরাল উন্নয়ন চালানো এবং সেগুলো মেশানো;
  • অন্য ভুল ক্ষতি না করে ভুল ফেরানো;
  • git push, git pull ও git fetch দিয়ে অন্য রিপোজিটরির সঙ্গে ইতিহাস বিনিময়।

Git একটি কনসোল ইউটিলিটি। গ্রাফিক্যাল ক্লায়েন্ট ও এডিটরের ভেতরের প্যানেল (VS Code, IntelliJ IDEA) একই কমান্ডের ওপর আবরণ মাত্র।

GitHub কী

GitHub Git রিপোজিটরির জন্য একটি ক্লাউড প্ল্যাটফর্ম, এখন যা Microsoft-এর মালিকানাধীন। সেখানে রিপোজিটরি বানিয়ে লোকাল কোড git push দিয়ে পাঠালে তা সহকর্মী, নিয়োগকর্তা বা পাবলিক রিপোজিটরি হলে পুরো ইন্টারনেটের জন্য উপলব্ধ হয়।

তবে GitHub-এর মূল্য শুধু সংরক্ষণে নয়। রিপোজিটরিকে ঘিরে এমন কিছু যোগ করে, যা Git-এর মধ্যে নেই:

  • Pull request — ব্রাঞ্চ মেশানোর অনুরোধ, সঙ্গে লাইন ধরে আলোচনা ও কোড রিভিউ;
  • Issues — প্রকল্পের সঙ্গে যুক্ত টাস্ক ও বাগ রিপোর্ট;
  • GitHub Actions — CI/CD: প্রতিটি push-এ স্বয়ংক্রিয় টেস্ট, বিল্ড ও ডিপ্লয়;
  • অ্যাক্সেস নিয়ন্ত্রণ — কে পড়তে, লিখতে বা সুরক্ষিত ব্রাঞ্চে মেশাতে পারবে;
  • ডেভেলপার প্রোফাইল — কার্যকলাপের গ্রাফ ও পাবলিক প্রকল্প, যা নিয়োগকর্তারা দেখেন;
  • GitHub Pages — রিপোজিটরি থেকে সরাসরি স্ট্যাটিক ওয়েবসাইটের বিনামূল্যে হোস্টিং।

"git com" বা "git hub" লিখে খোঁজা হলে সাধারণত এই সার্ভিসটিই বোঝানো হয়, যার ঠিকানা github.com। Git-এর নিজের অফিসিয়াল সাইট git-scm.com, সেখান থেকে ইনস্টলার নামানো হয়।

Git ও GitHub: টেবিলে তুলনা

মানদণ্ডGitGitHub
এটি কীভার্সন কন্ট্রোল প্রোগ্রামরিপোজিটরি হোস্টিংয়ের ওয়েব সার্ভিস
কোথায় চলেআপনার কম্পিউটারেক্লাউডে, ব্রাউজার ও API-র মাধ্যমে
ইন্টারনেট লাগে কিনা, রিমোটের সঙ্গে বিনিময় ছাড়াহ্যাঁ
লাইসেন্সউন্মুক্ত উৎস (GPLv2), বিনামূল্যেমালিকানাধীন সার্ভিস, বিনামূল্যে ও পেইড প্ল্যান আছে
ইন্টারফেসকমান্ড লাইন, GUI ক্লায়েন্টওয়েবসাইট, GitHub Desktop, gh CLI
প্রধান কাজইতিহাস, ব্রাঞ্চ, মেশানোদলগত কাজ, রিভিউ, CI, কোড প্রকাশ
একটি ছাড়া অন্যটি চলে কিহ্যাঁ, পুরোপুরিনা, GitHub Git-এর ওপর তৈরি

Git ও GitHub একসঙ্গে কীভাবে কাজ করে

দুটির সংযোগ হলো remote, অর্থাৎ দূরবর্তী রিপোজিটরি। লোকাল রিপোজিটরিতে GitHub-এর ঠিকানা একটি সংক্ষিপ্ত নামে থাকে, ডিফল্টে origin। এরপর বিনিময় হয় তিনটি কমান্ডে:

  • git push — নিজের নতুন কমিট সার্ভারে পাঠানো;
  • git fetch — অন্যের কমিট নামানো, কিন্তু আপনার ফাইলে হাত না দিয়ে;
  • git pull — নামিয়ে সঙ্গে সঙ্গে বর্তমান ব্রাঞ্চে মেশানো (মূলত fetch + merge বা rebase)।

গুরুত্বপূর্ণ: আপনি না পাঠানো পর্যন্ত GitHub আপনার কোড দেখতে পায় না। প্রথম git push-এর আগে কমিট শুধু লোকালি থাকে। এ থেকেই নতুনদের সাধারণ ভুল আসে: "কমিট করেছি, কিন্তু GitHub-এ কিছু নেই।"

সাধারণ পথ: লোকাল প্রকল্প থেকে GitHub পর্যন্ত

# ১. লোকালি রিপোজিটরি বানানো
cd my-project
git init
git add .
git commit -m "প্রথম কমিট"

# ২. github.com-এ ফাঁকা রিপোজিটরি বানানো (README ছাড়া),
#    তার ঠিকানা কপি করে remote হিসেবে যুক্ত করা
git remote add origin git@github.com:username/my-project.git

# ৩. ব্রাঞ্চের নাম main করে পাঠানো
git branch -M main
git push -u origin main

-u ফ্ল্যাগ (সম্পূর্ণ রূপ --set-upstream) লোকাল main-কে রিমোটের সঙ্গে যুক্ত করে। এরপর শুধু git push ও git pull লিখলেই চলে, আর্গুমেন্ট ছাড়া।

উল্টো পথ: GitHub-এর রিপোজিটরি থেকে শুরু

প্রকল্প যদি আগে থেকেই GitHub-এ থাকে, তাহলে নতুন করে বানান না, ক্লোন করুন:

git clone https://github.com/username/my-project.git
cd my-project

কমান্ডটি পুরো ইতিহাস নামাবে এবং origin remote নিজে সেট করবে।

প্রমাণীকরণ: SSH না HTTPS

২০২১ সাল থেকে GitHub Git-এর HTTPS অপারেশনে অ্যাকাউন্টের পাসওয়ার্ড গ্রহণ করে না। দুটি কার্যকর বিকল্প আছে।

HTTPS + Personal Access Token। টোকেন অ্যাকাউন্টের সেটিংসে (Settings → Developer settings) বানানো হয় এবং পাসওয়ার্ডের জায়গায় দেওয়া হয়। প্রতিবার না লিখতে Git একটি ক্রেডেনশিয়াল ম্যানেজার ব্যবহার করে — Windows-এ এটি Git for Windows-এর সঙ্গে আসে।

SSH কী। নিয়োগকর্তারা যে বিকল্পটি নিজে সেট করতে পারা আশা করেন:

# কী বানানো
ssh-keygen -t ed25519 -C "you@example.com"

# পাবলিক অংশ বের করে GitHub-এ যোগ করা:
# Settings → SSH and GPG keys → New SSH key
cat ~/.ssh/id_ed25519.pub

# সংযোগ যাচাই
ssh -T git@github.com

সফল হলে GitHub আপনার লগইনসহ একটি স্বাগত বার্তা দেয় এবং জানায় যে শেল-অ্যাক্সেস দেওয়া হয়নি — এটি স্বাভাবিক। এ ক্ষেত্রে রিপোজিটরির ঠিকানা https:// নয়, git@github.com:user/repo.git ফরম্যাটে ব্যবহার করতে হবে।

রিপোজিটরি যদি আগে HTTPS-এ যুক্ত হয়ে থাকে, তবে এক কমান্ডে SSH-এ বদলানো যায়:

git remote set-url origin git@github.com:username/my-project.git

GitHub, GitLab ও অন্যরা: পার্থক্য কোথায়

GitHub Git-এর একমাত্র হোস্টিং নয়। সবাই একই Git নিয়ে কাজ করে, তাই রিপোজিটরি ইতিহাস না হারিয়ে এক সার্ভিস থেকে অন্যটিতে সরানো যায়। পার্থক্য কোডের চারপাশের সরঞ্জামে।

সার্ভিসবৈশিষ্ট্যকখন বেছে নেওয়া হয়
GitHubবৃহত্তম ওপেন সোর্স সম্প্রদায়, GitHub Actions, Copilotপোর্টফোলিও, ওপেন সোর্স প্রকল্প, বেশিরভাগ স্টার্টআপ
GitLabবাক্সেই CI/CD, নিজের সার্ভারে (self-hosted) চালানো যায়যে কোম্পানিগুলো কোড নিজেদের অবকাঠামোতেই রাখতে চায়
BitbucketJira ও Atlassian পণ্যের সঙ্গে সংযোগAtlassian পরিবেশে থাকা দল
Gitea, Forgejoহালকা, ওপেন সোর্স, self-hosted সমাধানছোট দল, ঘরোয়া সার্ভার

GitLab-এ মেশানোর অনুরোধকে বলে merge request, GitHub-এ pull request; তবে মূল কাজ একই: ব্রাঞ্চের পরিবর্তন প্রস্তাব করা এবং মেশানোর আগে আলোচনা করা। পরিভাষা আলাদা, কিন্তু Git-এর কমান্ড একই।

একটি লোকাল রিপোজিটরিতে একসঙ্গে একাধিক remote রাখা যায়, যেমন প্রকল্প GitHub ও GitLab দুই জায়গাতেই প্রতিফলিত করতে:

git remote add gitlab git@gitlab.com:username/my-project.git
git push gitlab main
git remote -v

একা কাজ করলে কি GitHub লাগে

প্রযুক্তিগতভাবে না: Git লোকালি চমৎকার চলে। তবু একক প্রকল্পের জন্যও রিমোট রিপোজিটরির তিনটি বড় সুবিধা আছে।

  • ব্যাকআপ। ল্যাপটপ নষ্ট হলে কোড ও পুরো ইতিহাস সার্ভারে অক্ষত থাকে।
  • একাধিক ডিভাইস। বাসায় ও অফিসে কাজ করলে push ও pull দিয়ে সিঙ্ক হয়।
  • পোর্টফোলিও। জুনিয়র পদের বাছাইয়ে নিয়োগকর্তারা প্রায়ই রেজিউমের আগে GitHub প্রোফাইল দেখেন: জীবন্ত প্রকল্প আছে কি না, অর্থবহ কমিট বার্তা আছে কি না, README আছে কি না।

নতুনদের শুরু কোথা থেকে

Git ও GitHub একসঙ্গে শেখার দরকার নেই, ক্রমটি গুরুত্বপূর্ণ। আগে লোকাল চক্র শিখুন: git init, git status, git add, git commit, git log, ব্রাঞ্চ ও মেশানো। সেটি সাহায্য ছাড়া চললে GitHub-এ অ্যাকাউন্ট খুলুন, SSH সেট করুন এবং push, pull, fetch শিখুন। শেষ ধাপ দলগত প্রক্রিয়া: ফর্ক, কাজের জন্য ব্রাঞ্চ, pull request, রিভিউ।

GitHub-এ নিয়োগকর্তা কী দেখেন

সবুজ কার্যকলাপের বর্গক্ষেত্রগুলো মূল বিষয় নয়। অভিজ্ঞ রিভিউয়ার কয়েক মিনিটে অন্য জিনিসগুলো যাচাই করেন:

  • "fix", "123", "ঠিক করলাম"-এর বদলে অর্থবহ কমিট বার্তা;
  • একটি বিশাল "প্রকল্প জমা" কমিটের বদলে ছোট, যৌক্তিক কমিট;
  • কীভাবে চালাতে হয় তা বর্ণনা করা README;
  • .gitignore ফাইল: রিপোজিটরিতে node_modules, পাসওয়ার্ডসহ .env বা IDE-র ফাইল নেই;
  • শিক্ষামূলক প্রকল্পেও ব্রাঞ্চ ও pull request, যা দেখায় আপনি দলীয় প্রক্রিয়ায় অভ্যস্ত।

নতুনদের সাধারণ ভুল

«fatal: not a git repository»

Git-এর কমান্ড রিপোজিটরির বাইরে চালানো হয়েছে। প্রকল্পের ফোল্ডারে যান বা git init চালান। এখানে GitHub-এর নিবন্ধনের কোনো ভূমিকা নেই: এটি লোকাল Git-এর ত্রুটি।

«Permission denied (publickey)»

SSH কী বানানো হয়নি, GitHub-এ যোগ হয়নি, অথবা ssh-agent-এ লোড হয়নি। ssh -T git@github.com চালিয়ে এবং অ্যাকাউন্টের কী-তালিকা দেখে যাচাই করুন।

push-এর সময় «rejected … (fetch first)»

সার্ভারে এমন কমিট আছে, যা আপনার কাছে নেই, যেমন GitHub-এ README দিয়ে রিপোজিটরি বানানো হয়েছিল। আগে পরিবর্তন নিন: git pull --rebase origin main, তারপর git push আবার। কার কাজ মুছে যাবে বুঝতে না পারলে --force ব্যবহার করবেন না।

পাবলিক রিপোজিটরিতে গোপন তথ্য

কমিটে ঢোকা পাসওয়ার্ড বা API কী ফাইল মুছে দিলেও ইতিহাসে থেকে যায়। এমন কী তৎক্ষণাৎ বাতিল করে নতুন করে বানাতে হয়, এবং .env আগে থেকেই .gitignore-এ যোগ করতে হয়।

সারসংক্ষেপ

Git হলো আপনার কম্পিউটারের ভার্সন কন্ট্রোল, আর GitHub হলো সেই রিপোজিটরিগুলো ক্লাউডে রাখার সার্ভিস, যেখানে দলগত কাজ গড়ে ওঠে। GitLab, Bitbucket ও অন্যরা GitHub-এর বিকল্প, Git-এর বিকল্প নয়: সবার নিচে একই কমিট, ব্রাঞ্চ ও কমান্ড। শুরু করুন লোকাল Git দিয়ে, তারপর remote যোগ করুন এবং SSH সেট করুন। লোকাল রিপোজিটরিকে GitHub-এর সঙ্গে যুক্ত করা, push, pull ও fetch Git কোর্সে বাস্তব অনুশীলনে শেখানো হয়।

সাধারণ প্রশ্ন

GitHub কি বিনামূল্যে?

হ্যাঁ, বিনামূল্যের প্ল্যানে সীমাহীন সংখ্যক পাবলিক ও প্রাইভেট রিপোজিটরি বানানো যায়। পেইড প্ল্যান দলের জন্য অতিরিক্ত ফিচার এবং প্রাইভেট প্রকল্পের জন্য বেশি GitHub Actions মিনিট যোগ করে।

কমান্ড লাইন ছাড়া কি GitHub ব্যবহার করা যায়?

হ্যাঁ, GitHub Desktop বা এডিটরের বিল্ট-ইন Git প্যানেল দিয়ে। তবে এগুলো একই Git কমান্ড চালায়, তাই বোঝা উপকারী, বিশেষ করে কনফ্লিক্টে।

GitHub অ্যাকাউন্ট থাকলে কি Git ইনস্টল করা লাগে?

হ্যাঁ। অ্যাকাউন্ট কোড রাখার জায়গা দেয়, আর কোড নিয়ে লোকালি কাজ, যেমন কমিট, ব্রাঞ্চ ও push, ইনস্টল করা Git দিয়েই হয়।

GitHub থেকে GitLab-এ রিপোজিটরি কীভাবে সরাবেন?

নতুন remote যোগ করে সব ব্রাঞ্চ ও ট্যাগ পাঠান: git push gitlab --all এবং git push gitlab --tags। দুই সার্ভিসই Git-এ চলে, তাই ইতিহাস পুরোপুরি সরে।

পাবলিক ও প্রাইভেট রিপোজিটরির পার্থক্য কী?

পাবলিক রিপোজিটরি ইন্টারনেটে সবাই দেখতে পারে, প্রাইভেট শুধু আপনি এবং আমন্ত্রিত সদস্যরা। পোর্টফোলিওর জন্য পাবলিক রিপোজিটরি দরকার।

ভিডিওতে বিষয়টি শিখুন

“শূন্য থেকে আত্মবিশ্বাসী ডেভেলপার পর্যন্ত গিট” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।

কোর্সে যান