GitLab কী এবং Git-এর সঙ্গে কীভাবে কাজ করবেন: clone, push, merge request, CI/CD
GitLab হলো একটি ওয়েব প্ল্যাটফর্ম, যেখানে Git repository রাখা হয় এবং দলের কাজ হয়: code review, merge request, tasks ও CI/CD এক জায়গায়। এটি cloud-এ gitlab.com থেকে বা কোম্পানির নিজস্ব সার্ভারে চালানো যায়। কোড পাঠানো ও আনতে একই সাধারণ Git কমান্ড চলে: clone, push ও pull।
GitLab কী
GitLab এমন একটি প্ল্যাটফর্ম, যেখানে Git repository রাখা হয় এবং তাকে ঘিরে দলের কাজ চলে: code দেখা, merge request (মেশানোর অনুরোধ), tasks, wiki, container registry এবং অন্তর্নির্মিত CI/CD। সহজভাবে বললে, "GitLab" হলো GitHub-এর মতো সুবিধাসহ নিজস্ব build pipeline, এবং সবকিছু নিজের সার্ভারে চালানোর বিকল্প। অনেক কোম্পানি, বিশেষত বড় প্রতিষ্ঠান, তাদের কোড অভ্যন্তরীণ নেটওয়ার্কে চলা GitLab-এ রাখে।
প্রকল্পটি ২০১১ সালে কোড হোস্ট করার একটি উন্মুক্ত অ্যাপ্লিকেশন হিসেবে শুরু হয়, তারপর তার চারপাশে GitLab Inc. কোম্পানি গড়ে ওঠে। প্ল্যাটফর্মের দুটি সংস্করণ আছে: Community Edition, যা উন্মুক্ত এবং নিজের সার্ভারে বিনামূল্যে বসানো যায়, এবং Enterprise Edition, যাতে পেইড সুবিধা আছে। gitlab.com-এর plan-গুলোর নাম Free, Premium ও Ultimate।
শব্দগুলো আলাদা করা জরুরি। Git একটি version control ব্যবস্থা, আপনার কম্পিউটারে চলা প্রোগ্রাম। GitLab একটি সেবা, যা repository-র দূরবর্তী কপি রাখে এবং দলের জন্য ইন্টারফেস ও সরঞ্জাম যোগ করে। GitLab ছাড়া Git চলে, কিন্তু Git ছাড়া GitLab-এ কাজ হয় না।
Git ও GitLab-এর পার্থক্য
"git ও gitlab কী" প্রশ্নটি সাধারণত তখনই ওঠে, যখন চাকরির বিজ্ঞপ্তি বা প্রথম কর্মদিবসের আলোচনায় দুটো শব্দই আসে। পার্থক্যটি একটি ডকুমেন্ট আর cloud storage-এর পার্থক্যের মতো: Git ফাইলের পরিবর্তন, commit-এর ইতিহাস ও branch স্থানীয়ভাবে সামলায়। GitLab সেই ইতিহাস নেটওয়ার্কের মাধ্যমে নেয় এবং ব্রাউজারে দেখায়।
| Git | GitLab | |
|---|---|---|
| এটি কী | Version control প্রোগ্রাম | Repository ও দলের কাজের জন্য ওয়েব প্ল্যাটফর্ম |
| কোথায় চলে | ডেভেলপারের কম্পিউটারে | gitlab.com-এ বা কোম্পানির সার্ভারে |
| ইন্টারনেট লাগে? | না, শুধু push, pull, fetch, clone-এর সময় | হ্যাঁ, এটি নেটওয়ার্ক সেবা |
| মূল কাজ | Commit, branch, merge, ইতিহাস | Merge request, review, tasks, CI/CD, প্রবেশাধিকারের নিয়ম |
| কীভাবে ব্যবহার হয় | Command line, IDE, GUI clients | ব্রাউজার ও সাধারণ Git কমান্ড |
কোড-সংক্রান্ত সব কাজ, যেমন commit, branch ও merge, আপনি এখনও Git-এ করেন। GitLab কেবল git push-এর ফলাফল গ্রহণ করে এবং সহকর্মীদের সঙ্গে সেটি নিয়ে আলোচনা সম্ভব করে।
GitLab ও GitHub-এর পার্থক্য
দুটি সেবাই Git repository রাখে এবং code review দেয়, তাই মৌলিক দক্ষতা একইভাবে কাজে লাগে। পার্থক্য মূলত গুরুত্বে ও স্থাপনার পদ্ধতিতে।
| মানদণ্ড | GitLab | GitHub |
|---|---|---|
| মেশানোর অনুরোধ | Merge request (MR) | Pull request (PR) |
| CI/CD | অন্তর্নির্মিত GitLab CI/CD, ফাইল .gitlab-ci.yml | GitHub Actions, ফাইল .github/workflows/-এ |
| নিজের সার্ভারে | বিনামূল্যের Community Edition নিজের সার্ভারে | GitHub Enterprise Server, পেইড |
| প্ল্যাটফর্মের সোর্স কোড | উন্মুক্ত (Community Edition) | বন্ধ |
| প্রজেক্টের গোষ্ঠী | Groups ও ভেতরের subgroups | Organizations |
| কোথায় বেশি চলে | কোম্পানির ডেভেলপমেন্ট, অভ্যন্তরীণ সার্ভার | Open source, পাবলিক প্রজেক্ট, portfolio |
বাস্তবে অনেক ডেভেলপার দুটোই ব্যবহার করেন: ব্যক্তিগত প্রজেক্ট ও portfolio GitHub-এ, আর কোম্পানির কাজ তাদের GitLab-এ। Git-এর কমান্ড একই থাকে, বদলায় শুধু remote repository-র ঠিকানা।
gitlab.com নাকি নিজের সার্ভার (self-hosted)
ছোট প্রজেক্ট ও ছোট দলের জন্য cloud-এর gitlab.com ভালো: নিবন্ধন করে তখনই repository বানানো যায়। Updates, backup ও উপলব্ধতার দায়িত্ব GitLab-এর। বিনামূল্যের plan-এর সীমা (সদস্য সংখ্যা, CI-র মিনিট, storage) সময়ের সঙ্গে বদলাতে পারে, তাই সর্বশেষ শর্ত plans-এর পাতায় দেখুন।
Self-hosted GitLab কোম্পানি নিজের সার্ভারে বসায়: Linux প্যাকেজ থেকে, Docker-এ বা Kubernetes-এ। কোড কোম্পানির নেটওয়ার্কের বাইরে যায় না, LDAP দিয়ে কোম্পানির login যুক্ত করা যায়, এবং build-এর জন্য নিজস্ব runners বসানো যায়। বিনিময়ে administrators-কে updates ও backup নিজেরাই সামলাতে হয়। ডেভেলপারের কাছে পার্থক্য প্রায় চোখে পড়ে না: ঠিকানা gitlab.com-এর বদলে হয়, ধরা যাক, gitlab.company.com।
GitLab-এর জন্য Git সেটআপ
প্রথম commit-এর আগে নাম ও e-mail সেট করুন। এগুলো ইতিহাসে লেখা থাকে, এবং GitLab e-mail দিয়ে commit-গুলোকে আপনার প্রোফাইলের সঙ্গে মেলায়:
git config --global user.name "Ivan Petrov"
git config --global user.email "ivan@example.com"
Windows-এ Git Bash-এ কাজ করা সুবিধাজনক: এটি Git for Windows-এর সঙ্গে আসে এবং তাতে ssh-keygen থাকে, তাই এই লেখার সব কমান্ড সেখানে বদল ছাড়াই চলে। এরপর ঠিক করতে হবে লগইনের পদ্ধতি: token-সহ HTTPS, অথবা SSH key।
HTTPS দিয়ে লগইন: personal access token
Git-এর HTTPS কাজের জন্য অ্যাকাউন্টের পাসওয়ার্ড ব্যবহার করবেন না; দুই-ধাপের যাচাই (two-factor authentication) চালু থাকলে সেটি কাজও করবে না। তার বদলে GitLab-এর প্রোফাইল সেটিংসে Access tokens অংশে personal access token বানান। কোড নিয়ে কাজের জন্য read_repository ও write_repository অধিকারই যথেষ্ট; মেয়াদ দিন এবং token এখনই সংরক্ষণ করুন, কারণ সেটি আর দেখানো হয় না।
প্রথম push বা clone-এ Git login ও পাসওয়ার্ড চাইবে: GitLab-এর username দিন, এবং পাসওয়ার্ডের জায়গায় token। Git for Windows-এ credential manager আগে থেকে থাকে, সে token মনে রাখবে, আর বারবার জিজ্ঞেস করবে না।
SSH key দিয়ে লগইন
রোজকার কাজের জন্য SSH বেশি সুবিধাজনক: একবার key যুক্ত করলে আর কিছু লিখতে হয় না।
ssh-keygen -t ed25519 -C "ivan@example.com"
cat ~/.ssh/id_ed25519.pub
.pub ফাইলের বিষয়বস্তু (public key) প্রোফাইল সেটিংসের SSH Keys অংশে বসান। সংযোগ যাচাই:
ssh -T git@gitlab.com
Welcome to GitLab, @ivan.petrov!
GitLab থেকে git clone কীভাবে করবেন
প্রজেক্টের পাতায় Code বোতাম আছে, যার দুটি ঠিকানা: SSH ও HTTPS। যেটি দরকার সেটি কপি করে git clone চালান:
# HTTPS দিয়ে
git clone https://gitlab.com/my-group/my-project.git
# SSH দিয়ে
git clone git@gitlab.com:my-group/my-project.git
GitLab-এ প্রজেক্টের ঠিকানায় subgroups-ও থাকতে পারে, যেমন gitlab.com/company/backend/api.git। এটি স্বাভাবিক, পুরো ঠিকানাটি কপি করুন।
Token দিয়ে GitLab থেকে git clone
Script বা এমন সার্ভারে, যেখানে পাসওয়ার্ড দেওয়ার কেউ নেই, token সরাসরি ঠিকানায় দেওয়া হয়। Login হিসেবে আপনার username বা বিশেষ oauth2 লেখা যায়:
git clone https://oauth2:YOUR_TOKEN@gitlab.com/my-group/my-project.git
মনে রাখবেন: এমন ঠিকানা .git/config-এ সংরক্ষিত হয় এবং shell history-তে যেতে পারে। স্বয়ংক্রিয়করণের জন্য deploy token বা project access token নিন, যার অধিকার কম এবং মেয়াদ ছোট, আর CI-তে অন্তর্নির্মিত CI_JOB_TOKEN ভেরিয়েবল ব্যবহার করুন।
GitLab-এ git push: কোড পাঠানো
প্রজেক্ট যদি আগে থেকেই আপনার কম্পিউটারে থাকে, তবে GitLab-এ একটি খালি প্রজেক্ট বানান (README ছাড়া, যাতে অতিরিক্ত commit না হয়) এবং remote যুক্ত করুন:
git remote add origin git@gitlab.com:my-group/my-project.git
git branch -M main
git push -u origin main
-u স্থানীয় branch-কে remote branch-এর সঙ্গে যুক্ত করে, এরপর শুধু git push ও git pull লিখলেই চলে। রোজকার চক্র যেকোনো সেবার মতোই:
git switch -c feature/login
git add .
git commit -m "লগইন ফর্ম যোগ করা"
git push -u origin feature/login
git pull
Tags আলাদাভাবে পাঠানো হয়: git push origin v1.2.0, অথবা সবগুলো একসঙ্গে git push --tags। GitLab-এ tags, Tags অংশে দেখা যায় এবং প্রায়ই release pipeline চালু করে।
GitLab-এ git push-এর সাধারণ ত্রুটি
- HTTP Basic: Access denied — username ভুল, অথবা token-এর জায়গায় পাসওয়ার্ড দেওয়া হয়েছে।
write_repositoryঅধিকারসহ token বানান এবং credential manager থেকে পুরনো এন্ট্রি মুছুন। - Permission denied (publickey) — GitLab SSH key চিনতে পারেনি। নিশ্চিত করুন public key প্রোফাইলে যুক্ত আছে, এবং
ssh -T git@gitlab.comচালান। - You are not allowed to push code to protected branches — branch (সাধারণত
main) সুরক্ষিত। আপনার নিজের branch-এ পাঠান এবং merge request খুলুন। - rejected ... (fetch first) — server-এ এমন commit আছে যা আপনার কাছে নেই।
git pull --rebaseচালিয়ে আবার push করুন। - remote: Project not found — ঠিকানায় ভুল আছে, অথবা প্রজেক্টে প্রবেশাধিকার নেই; প্রজেক্টের মালিকের কাছে আপনার role (ভূমিকা) জেনে নিন।
GitLab-এ merge request
Merge request হলো GitHub-এর pull request-এর সমতুল্য: আপনার branch-কে মূল branch-এ মেশানোর অনুরোধ। এই MR-এই সহকর্মীরা code-এর লাইনে মন্তব্য করেন, CI checks চলে এবং merge-এর সিদ্ধান্ত হয়। নতুন branch git push করার পর GitLab terminal-এ MR বানানোর লিংক দেখায়, আর ওয়েব ইন্টারফেসেও MR বানানোর প্রস্তাব আসে।
Push options দিয়ে command line থেকেও MR বানানো যায়:
git push -o merge_request.create -o merge_request.target=main origin feature/login
সাধারণ প্রক্রিয়া: কাজের জন্য branch → commits → push → MR → review ও সবুজ pipeline → merge। Merge-এর সময় GitLab commits-গুলোকে একটিতে গুটিয়ে (squash) দিতে পারে এবং উৎস branch মুছতে পারে। MR-এ conflict হলে সহজ উপায় হলো branch স্থানীয়ভাবে হালনাগাদ করা: git pull --rebase origin main বা git merge main, conflicts মেটানো, এবং আবার push করা।
অসম্পূর্ণ কাজকে Draft হিসেবে চিহ্নিত করুন: এমন MR ভুল করে merge হয় না, কিন্তু সহকর্মীরা পরিবর্তন দেখে আলোচনা করতে পারেন।
GitLab-এ CI/CD: .gitlab-ci.yml
GitLab-এর মূল বৈশিষ্ট্য অন্তর্নির্মিত CI/CD। Repository-র মূলে .gitlab-ci.yml ফাইল রাখলেই হয়, এবং প্রতিটি push-এ GitLab একটি pipeline চালায়, যা stages ও jobs নিয়ে গঠিত। Jobs চালায় runners: gitlab.com-এ সাধারণ runners পাওয়া যায়, নিজের সার্ভারে সেগুলো আলাদাভাবে বসাতে হয়।
stages:
- test
- deploy
test:
stage: test
image: python:3.12
script:
- pip install -r requirements.txt
- pytest
deploy:
stage: deploy
script:
- ./deploy.sh
rules:
- if: $CI_COMMIT_TAG
এখানে tests প্রতিটি push-এ চলে, আর deploy job শুধু তখনই চলে যখন tag পাঠানো হয়: git tag v1.0.0 এবং git push origin v1.0.0। Pipeline-এর ফলাফল সরাসরি merge request-এ দেখা যায়, এবং checks পাস না করা পর্যন্ত merge আটকানো যায়।
GitLab-এ repository কীভাবে মুছবেন
Git-এর কমান্ড server-এর প্রজেক্ট মুছতে পারে না: git push শুধু branch ও tag বদলায়। প্রজেক্ট মোছা হয় ওয়েব ইন্টারফেসে: প্রজেক্টের সেটিংস, General অংশ, Advanced ব্লক, এবং নাম নিশ্চিত করে মোছার বোতাম। এর জন্য Owner ভূমিকা লাগে। স্থানীয় কপি তবু থেকে যায়, সেটি কেবল .git-সহ একটি ফোল্ডার।
সার্ভারে কিছু না মুছে শুধু স্থানীয় repository-কে GitLab থেকে আলাদা করতে চাইলে git remote remove origin যথেষ্ট।
কখন GitLab বেছে নেবেন
- কোড বাইরের cloud-এ নেওয়া যাবে না, নিজের সার্ভার দরকার।
- বাইরের সেবা ছাড়াই তৈরি CI/CD চাই।
- বড় প্রতিষ্ঠান, যেখানে দলের স্তরবিন্যাস আছে: nested groups ও নমনীয় ভূমিকা কাজে লাগে।
- আপনি এমন কোম্পানিতে চাকরি করছেন যেখানে আগে থেকেই GitLab ব্যবহার হয়: তখন বেছে নেওয়ার সুযোগ থাকে না, তবে Git-এর দক্ষতা পুরোপুরি কাজে লাগে।
Portfolio ও open source-এর জন্য প্রায়ই GitHub বেছে নেওয়া হয়, কারণ সেখানে কমিউনিটি বড় এবং প্রজেক্ট বেশি চোখে পড়ে। দুটো সেবায় একই প্রজেক্ট রাখতে বাধা নেই: একটি repository-র একাধিক remote থাকতে পারে।
উপসংহার
GitLab হলো Git repository-র জন্য একটি প্ল্যাটফর্ম, যেখানে merge request দিয়ে review, tasks ও অন্তর্নির্মিত CI/CD আছে, এবং যা cloud-এও চলে, নিজের সার্ভারেও চলে। এর সঙ্গে কাজ হয় পরিচিত কমান্ড দিয়ে: token বা SSH key সেট করুন, তারপর clone, commit, push ও merge request। Remote repository ও দলের workflow এই কোর্সে বাস্তবে বিস্তারিত শেখানো হয়েছে।
সাধারণ প্রশ্ন
GitLab কি বিনামূল্যে?
নিজের সার্ভারে বসানোর জন্য Community Edition বিনামূল্যে; gitlab.com-এ সীমাবদ্ধ বিনামূল্যের Free plan আছে, আর উন্নত সুবিধা পাওয়া যায় Premium ও Ultimate plan-এ।
GitHub থেকে GitLab-এ প্রজেক্ট সরানো যায় কি?
হ্যাঁ, GitLab-এ GitHub থেকে প্রজেক্ট import করার সুবিধা আছে। ইতিহাস হাতেও সরানো যায়: পুরনো ঠিকানা থেকে <code>git clone --mirror</code> এবং নতুনটিতে <code>git push --mirror</code>।
GitLab-এর জন্য কি আলাদা কমান্ড শিখতে হবে?
না, code-এর সঙ্গে কাজ সাধারণ Git কমান্ডেই হয়। GitLab ওয়েব ইন্টারফেস যোগ করে, আর automation-এর জন্য <code>glab</code> command line tool ও API আছে।
GitLab Flow ও Git Flow-এর পার্থক্য কী?
GitLab Flow সরল: কাজ feature branch-এ হয় এবং merge request দিয়ে main-এ যায়; environments ও releases-এর জন্য প্রয়োজনে আলাদা branch যোগ হয়, Git Flow-এর develop ও hotfix branch ছাড়াই।
“শূন্য থেকে আত্মবিশ্বাসী ডেভেলপার পর্যন্ত গিট” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।
- গিটহাব ও দূরবর্তী রিপোজিটরি: আপনার কোড ক্লাউডে
- বাস্তব দলে গিট প্রক্রিয়া: কোন ওয়ার্কফ্লো বেছে নেবেন