# GitLab क्या है और Git के साथ कैसे काम करें: clone, push, merge request, CI/CD

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

GitLab एक वेब प्लेटफ़ॉर्म है जहाँ Git repositories रखी जाती हैं और टीम का काम होता है: code review, merge request, tasks और CI/CD एक जगह पर। इसे cloud पर gitlab.com से या कंपनी के अपने सर्वर पर चलाया जा सकता है। Code भेजने और लाने के लिए वही सामान्य Git कमांड चलते हैं: clone, push और pull।

## GitLab क्या है

GitLab एक ऐसा प्लेटफ़ॉर्म है जहाँ Git repositories रखी जाती हैं, और उसके आसपास टीम का काम होता है: code देखना, merge request (मिलाने के अनुरोध), tasks, wiki, container registry और अंतर्निहित CI/CD। सरल शब्दों में, "GitLab" वह है जिसमें GitHub जैसी सुविधाएँ हैं, साथ में अपना build pipeline और यह विकल्प कि सब कुछ अपने सर्वर पर चले। कई कंपनियाँ, खासकर भारत और रूस में, अपना code अंदरूनी नेटवर्क पर चल रहे GitLab में रखती हैं।

प्रोजेक्ट 2011 में code होस्ट करने वाले एक खुले एप्लिकेशन के रूप में शुरू हुआ, फिर उसके आसपास GitLab Inc. कंपनी बनी। प्लेटफ़ॉर्म के दो संस्करण हैं: Community Edition, जो खुला है और अपने सर्वर पर मुफ़्त लगाया जा सकता है, और Enterprise Edition, जिसमें सशुल्क सुविधाएँ हैं। gitlab.com पर plans Free, Premium और Ultimate कहलाते हैं।

शब्दों में फ़र्क करना ज़रूरी है। Git एक version control सिस्टम है, आपके कंप्यूटर पर चलने वाला प्रोग्राम। GitLab एक सेवा है, जो repository की दूरस्थ प्रति रखती है और टीम के लिए इंटरफ़ेस व औज़ार जोड़ती है। GitLab के बिना Git चल सकता है, पर Git के बिना GitLab पर काम नहीं होता।

## Git और GitLab में फ़र्क

"git और gitlab क्या है" जैसे सवाल अक्सर तब पूछे जाते हैं जब नौकरी के विवरण या पहले दिन की बातचीत में दोनों शब्द सामने आते हैं। फ़र्क वैसा ही है जैसे दस्तावेज़ लिखने के औज़ार और क्लाउड स्टोरेज में: Git फ़ाइलों के बदलाव, commit का इतिहास और branches स्थानीय रूप से संभालता है। GitLab उस इतिहास को नेटवर्क पर लेता है और ब्राउज़र में दिखाता है।

|  | Git | GitLab |
| --- | --- | --- |

| यह क्या है | Version control का प्रोग्राम | Repositories और टीम काम के लिए वेब प्लेटफ़ॉर्म |

| कहाँ चलता है | डेवलपर के कंप्यूटर पर | gitlab.com पर या कंपनी के सर्वर पर |

| इंटरनेट चाहिए? | नहीं, केवल push, pull, fetch, clone के समय | हाँ, यह नेटवर्क सेवा है |

| मुख्य काम | Commits, branches, merge, इतिहास | Merge request, review, tasks, CI/CD, पहुँच के नियम |

| इस्तेमाल कैसे होता है | Command line, IDE, GUI clients | ब्राउज़र और सामान्य Git कमांड |

कोड से जुड़े सभी काम, जैसे commit, branch और merge, आप अब भी Git में करते हैं। GitLab केवल `git push` से आया नतीजा लेता है और सहकर्मियों के साथ उस पर चर्चा संभव बनाता है।

## GitLab और GitHub में क्या फ़र्क है

दोनों सेवाएँ Git repositories रखती हैं और 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 छोटे प्रोजेक्ट और छोटी टीमों के लिए ठीक है: रजिस्टर करें और तुरंत repositories बनाएँ। Updates, backups और उपलब्धता की ज़िम्मेदारी GitLab की होती है। मुफ़्त plan की सीमाएँ (सदस्यों की संख्या, CI के मिनट, storage) समय के साथ बदल सकती हैं, इसलिए ताज़ा शर्तें plans के पेज पर देखें।

Self-hosted GitLab कंपनी अपने सर्वर पर लगाती है: Linux पैकेज से, Docker में या Kubernetes पर। Code कंपनी के नेटवर्क से बाहर नहीं जाता, LDAP से कंपनी का login जोड़ा जा सकता है, और build के लिए अपने runners लगाए जा सकते हैं। बदले में administrators को updates और backups खुद संभालने होते हैं। डेवलपर के लिए फ़र्क लगभग नहीं दिखता: पता `gitlab.com` की जगह, मान लीजिए, `gitlab.company.ru` होगा।

## Git को GitLab के लिए सेट करना

पहले commit से पहले नाम और e-mail सेट करें। ये इतिहास में दर्ज होते हैं, और GitLab e-mail से commits को आपकी प्रोफ़ाइल से जोड़ता है:

```
git config --global user.name "Ivan Petrov"
git config --global user.email "ivan@example.com"
```

Windows पर Git Bash में काम करना सुविधाजनक है: वह Git for Windows के साथ आता है और उसमें `ssh-keygen` होता है, इसलिए इस लेख के सभी कमांड उसमें बिना बदलाव चलते हैं। आगे आपको login का तरीका चुनना है: token के साथ HTTPS, या SSH key।

### HTTPS से login: personal access token

Git के HTTPS operations के लिए खाते का पासवर्ड न लें; दो-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 से login

रोज़ के काम के लिए 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 के साथ git clone GitLab से

Scripts या ऐसे सर्वरों पर जहाँ पासवर्ड डालने वाला कोई नहीं, token सीधे पते में दिया जाता है। Login के रूप में आपका username या विशेष `oauth2` लिखा जा सकता है:

```
git clone https://oauth2:YOUR_TOKEN@gitlab.com/my-group/my-project.git
```

ध्यान दें: ऐसा पता `.git/config` में सेव होता है और shell history में जा सकता है। Automation के लिए deploy token या project access token लें, जिनके अधिकार कम हों और समय सीमा छोटी हो, और CI में अंतर्निहित `CI_JOB_TOKEN` वेरिएबल का उपयोग करें।

## GitLab पर git push: code भेजना

अगर प्रोजेक्ट पहले से आपके कंप्यूटर पर है, तो GitLab में खाली प्रोजेक्ट बनाएँ (README के बिना, ताकि extra 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 चलाते हैं।

### git push GitLab में आम त्रुटियाँ

- **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 पर ऐसे commits हैं जो आपके पास नहीं हैं। `git pull --rebase` चलाकर फिर push करें।
- **remote: Project not found** — पते में टाइपो है, या प्रोजेक्ट तक पहुँच नहीं है; मालिक से भूमिका पूछें।

## 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
```

सामान्य प्रक्रिया: task के लिए 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` केवल branches और tags बदलता है। प्रोजेक्ट वेब इंटरफ़ेस से हटाया जाता है: प्रोजेक्ट की सेटिंग, General भाग, Advanced ब्लॉक, और नाम की पुष्टि के साथ हटाने का बटन। इसके लिए Owner की भूमिका चाहिए। स्थानीय कॉपी फिर भी बनी रहती है, वह केवल `.git` वाला फ़ोल्डर है।

अगर server पर कुछ न हटाते हुए केवल स्थानीय repository को GitLab से अलग करना है, तो `git remote remove origin` काफ़ी है।

## कब GitLab चुनें

- Code को बाहरी cloud पर नहीं ले जा सकते, अपना सर्वर चाहिए।
- बिना बाहरी सेवाओं के, तैयार CI/CD चाहिए।
- बड़ी संस्था है जिसमें टीमों का पदानुक्रम है: nested groups और लचीली भूमिकाएँ काम आती हैं।
- आप ऐसी कंपनी में नौकरी कर रहे हैं जहाँ पहले से GitLab इस्तेमाल होता है: तब चुनाव नहीं होता, पर Git के कौशल पूरी तरह काम आते हैं।

Portfolio और open source के लिए अक्सर GitHub चुना जाता है, क्योंकि वहाँ समुदाय बड़ा है और प्रोजेक्ट ज़्यादा दिखते हैं। कुछ भी रोका नहीं है: एक ही प्रोजेक्ट के दो सेवाओं में remotes हो सकते हैं।

## निष्कर्ष

GitLab Git repositories के लिए एक प्लेटफ़ॉर्म है, जिसमें merge request से review, tasks और अंतर्निहित CI/CD है, और जो cloud पर भी चलता है और अपने सर्वर पर भी। इसके साथ काम परिचित कमांडों से होता है: token या SSH key सेट करें, फिर clone, commit, push और merge request। Remote repositories और टीम का workflow इस कोर्स में व्यवहार में विस्तार से सिखाए गए हैं।

## FAQ

**क्या GitLab मुफ़्त है?**

Community Edition अपने सर्वर पर लगाने के लिए मुफ़्त है; gitlab.com पर मुफ़्त Free plan है जिसकी सीमाएँ हैं, और उन्नत सुविधाएँ Premium और Ultimate plans में मिलती हैं।

**क्या 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 branches में होता है और merge request से main में जाता है; environments और releases के लिए ज़रूरत हो तो अलग branches जोड़ी जाती हैं, बिना Git Flow की develop और hotfix branches के।


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