본문으로 바로가기

Git & Gitlab 설치 및 구성

category Linux/RHEL7 & 8 2021. 7. 26. 14:29
반응형

Git과 GitLab은 같은 것이 아닙니다.

Git을 사용하기 위해 Gitlab이 필요하지는 않지만, Git을 사용하지 않고는 GitLab을 사용할 수 없습니다.

 

 

 

1. 로컬 Git Repository 설정

Git 리포지토리는 필요할 때 액세스할 수 있는 코드 버전을 저장할 수 있는 가상 저장소입니다. 신규 또는 기존 프로젝트에 대한 Git 리포지토리를 초기화하는 방법입니다.

# Install Git
[root@ansible-center hkjeon]# dnf install -y git
... < 중략 >

  perl-Term-Cap-1.17-395.el8.noarch                   perl-TermReadKey-2.37-7.el8.x86_64
  perl-Text-ParseWords-3.30-395.el8.noarch            perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch
  perl-Time-Local-1:1.280-1.el8.noarch                perl-URI-1.73-3.el8.noarch
  perl-Unicode-Normalize-1.25-396.el8.x86_64          perl-constant-1.33-396.el8.noarch
  perl-interpreter-4:5.26.3-416.el8.x86_64            perl-libnet-3.11-3.el8.noarch
  perl-libs-4:5.26.3-416.el8.x86_64                   perl-macros-4:5.26.3-416.el8.x86_64
  perl-parent-1:0.237-1.el8.noarch                    perl-podlators-4.11-1.el8.noarch
  perl-threads-1:2.21-2.el8.x86_64                    perl-threads-shared-1.58-2.el8.x86_64

Complete!


# Local Git Repo 초기화
[root@ansible-center demo-project]# cd /root/hkjeon/
[root@ansible-center hkjeon]# mkdir demo-project
[root@ansible-center hkjeon]# cd demo-project/
[root@ansible-center demo-project]# git init
Initialized empty Git repository in /root/hkjeon/demo-project/.git/


# Git User Info
[root@ansible-center demo-project]# git config --global user.name "hkjeon"
[root@ansible-center demo-project]# git config --global user.email "xxxxxxx@hanmail.net"
[root@ansible-center demo-project]# git config --list
user.name=hkjeon
user.email=xxxxx@hanmail.net
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true


# New File 생성
[root@ansible-center demo-project]# cat >> README.adoc <<EOF
> Welcome to Demo-Project
EOF

[root@ansible-center demo-project]# git add README.adoc


# Git status 확인
[root@ansible-center demo-project]# git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   README.adoc
    

# 변경사항 Commit
[root@ansible-center demo-project]# git commit -m "first commit"
[master (root-commit) 068f639] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.adoc

 

2. GitLab (Remote) Repository 설정

Gitlab 서버에 로그인하고 새 프로젝트를 만드는 방법입니다.

2.1 Gitlab Login

 

 

2.2 Gitlab Repo 생성

  1. Memu -> Projects -> Create New project
  2. Create blank project
  3. project name : demo-project / Public 선택
  4. Create project

 

 

3. Push Content to Remote Repository

로컬 Git 리포지토리에 원격 리포지토리를 추가하고 커밋을 원격 Gitlab 프로젝트에 푸시하는 방법입니다.

  1. GitLab UI Memu -> Projects -> Your Projects
  2. demo-project 선택
  3. clone 버튼 선택
  4. clone with HTTPS URL 주소 복사

 

# 원격 repository 추가
[root@ansible-center demo-project]# git remote add origin https://gitlab.com/hkjeon/demo-project.git

[root@ansible-center demo-project]# git remote -v
origin	https://gitlab.com/hkjeon/demo-project.git (fetch)
origin	https://gitlab.com/hkjeon/demo-project.git (push)


# Push Commit
[root@ansible-center demo-project]# git push -u origin master
Username for 'https://gitlab.com': hkjeon
Password for 'https://hkjeon@gitlab.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 239 bytes | 239.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for master, visit:
remote:   https://gitlab.com/hkjeon/demo-project/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote:
To https://gitlab.com/hkjeon/demo-project.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

 

  1. GitLab UI Memu -> Projects -> Your Projects
  2. demo-project 선택
  3. README.adoc 선택 및 내용 일치 확인

 

 

4. Securing Communication between Git and GitLab

git을 사용하여 로컬에서 작업한 다음 변경 사항을 GitLab 원격 저장소에 푸시합니다. git과 GitLab 간의 통신을 보호하기 위해 ssh 프로토콜을 사용할 수 있습니다. SSH 키를 사용하여 GitLab 원격 서버에 인증할 때 매번 사용자 이름과 암호를 제공할 필요가 없습니다.

 

4.1 SSH Key 복사

[root@ansible-center demo-project]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCi4OEBmkSd < 중 략 > 8= root@ansible-center

 

 

4.2 GitLab에 Public Key 추가

  1. GitLab UI
  2. 사용자 Profile 사진 선택
  3. Preferences -> 왼쪽 SSH Keys 메뉴 선택 -> Key 키 복사 -> Add Key 및 저장

 

 

 

4.3 Remote Repo URL 변경

GitLab에서 ssh 공개 키를 추가한 후 로컬 git 저장소에서 원격 저장소 URL을 ssh로 변경합니다.

  1. GitLab UI Memu -> Projects -> Your Projects
  2. demo-project 선택
  3. clone 버튼 선택
  4. clone with SSH 주소 복사

 

[root@ansible-center demo-project]# git remote set-url  origin git@gitlab.com:hkjeon/demo-project.git

[root@ansible-center demo-project]# git remote -v
origin	git@gitlab.com:hkjeon/demo-project.git (fetch)
origin	git@gitlab.com:hkjeon/demo-project.git (push)

 

 

4.4 연결 확인

[root@ansible-center demo-project]# cat >> README.adoc <<EOF
> Test Line
> EOF
[root@ansible-center demo-project]# git add README.adoc

[root@ansible-center demo-project]# git commit -m "test"
[master 90d07dd] test
 1 file changed, 1 insertion(+)

[root@ansible-center demo-project]# git push origin
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 272 bytes | 272.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for master, visit:
remote:   https://gitlab.com/hkjeon/demo-project/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote:
To gitlab.com:hkjeon/demo-project.git
   068f639..90d07dd  master -> master

 

 

5. New Git Branch

git checkout 명령을 사용하여 다음과 같이 마스터 브랜치에서 새 개발 브랜치를 전환하거나 생성할 수 있습니다.

# 새로운 브런치 추가
[root@ansible-center demo-project]# git checkout -b dev-branch
Switched to a new branch 'dev-branch'

[root@ansible-center demo-project]# git branch
* dev-branch
  master
  
  
  # GitLab에 Git 브런치 Push
  [root@ansible-center demo-project]# git push origin dev-branch
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for dev-branch, visit:
remote:   https://gitlab.com/hkjeon/demo-project/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev-branch
remote:
To gitlab.com:hkjeon/demo-project.git
 * [new branch]      dev-branch -> dev-branch

 

  1. GitLab UI Memu -> Projects -> Your Projects
  2. demo-project 선택
  3. Branches 선택
  4. dev-branch 페이지 선택

 

6. Create and Merge Pull Request

pull 요청은 원격 브랜치(Gitlab dev-branch 저장소)에 푸시한 변경 사항을 알릴 수 있는 기능입니다. 변경 사항이 마스터 브랜치에 병합되기 전에 변경 사항을 검토할 수 있습니다.

6.1 로컬 리포지토리에 코드 생성 및 커밋

# 로컬 리포지토리에서 코드 생성, 준비 및 커밋
[root@ansible-center demo-project]# git checkout dev-branch
Already on 'dev-branch'

[root@ansible-center demo-project]# cat >> main.yml <<EOF
> ---
> - name: Play for PR
>   hosts: localhost
>   tasks:
>     - name: Welcome message
>       debug:
>         msg: "PR is merged"
> EOF

[root@ansible-center demo-project]# git add main.yml

[root@ansible-center demo-project]# git commit -m "Add main.yml"
[dev-branch ceca33d] Add main.yml
 1 file changed, 7 insertions(+)
 create mode 100644 main.yml
 
 
 # 코드를 원격 저장소에 푸시
 [root@ansible-center demo-project]# git push origin dev-branch
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 369 bytes | 369.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for dev-branch, visit:
remote:   https://gitlab.com/hkjeon/demo-project/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev-branch
remote:
To gitlab.com:hkjeon/demo-project.git
   90d07dd..ceca33d  dev-branch -> dev-branch

 

 

6.2 Pull Request 생성

  1. GitLab UI Memu -> Projects -> Your Projects
  2. demo-project 선택
  3. branch -> dev-branch 선택
  4. Create merge request 선택
  5. Title : Add Main.yml / Merge Option Uncheck - Delete source branch when merge request is accepted / Merge Option Check - Squash commits when merge request is accepted 
  6. Create Merge request 선택

 

 

6.3 승인 및 병합

풀 리퀘스트를 생성한 후 특정 사람에게 제안한 변경 사항을 검토하도록 요청할 수 있습니다. 조직 구성원인 경우 특정 팀에 변경 사항을 검토하도록 요청할 수도 있습니다.

  1. GitLab UI Memu -> Projects -> Your Projects
  2. demo-project 선택
  3. Merge requests 선택
  4. Open 선택 -> Add Main.yml 선택
  5. Approve 선택
  6. master branch에 변경사항 Merge 버튼 선택

 

 

6.4 master git으로 가져오기

[root@ansible-center demo-project]# git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.


[root@ansible-center demo-project]# git pull

[root@ansible-center demo-project]# ls -l
total 8
-rw-r--r--. 1 root root 121 Jul 26 13:04 main.yml
-rw-r--r--. 1 root root 36 Jul 26 12:58 README.adoc
728x90