# GitLab কী এবং Git-এর সঙ্গে কীভাবে কাজ করবেন: clone, push, merge request, CI/CD

URL: https://skillaria.top/bn/guides/git/what-is-gitlab-git

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 এই কোর্সে বাস্তবে বিস্তারিত শেখানো হয়েছে।

## FAQ

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

নিজের সার্ভারে বসানোর জন্য Community Edition বিনামূল্যে; gitlab.com-এ সীমাবদ্ধ বিনামূল্যের Free plan আছে, আর উন্নত সুবিধা পাওয়া যায় Premium ও Ultimate plan-এ।

**GitHub থেকে GitLab-এ প্রজেক্ট সরানো যায় কি?**

হ্যাঁ, GitLab-এ GitHub থেকে প্রজেক্ট import করার সুবিধা আছে। ইতিহাস হাতেও সরানো যায়: পুরনো ঠিকানা থেকে git clone --mirror এবং নতুনটিতে git push --mirror।

**GitLab-এর জন্য কি আলাদা কমান্ড শিখতে হবে?**

না, code-এর সঙ্গে কাজ সাধারণ Git কমান্ডেই হয়। GitLab ওয়েব ইন্টারফেস যোগ করে, আর automation-এর জন্য glab command line tool ও API আছে।

**GitLab Flow ও Git Flow-এর পার্থক্য কী?**

GitLab Flow সরল: কাজ feature branch-এ হয় এবং merge request দিয়ে main-এ যায়; environments ও releases-এর জন্য প্রয়োজনে আলাদা branch যোগ হয়, Git Flow-এর develop ও hotfix branch ছাড়াই।


---
Source: Skillaria.Top (https://skillaria.top)
