본문으로 바로가기

[Gitlab] MR이 뭐죠?

category 3. Git 2021. 2. 14. 15:31

처음으로 단체 협업 프로젝트를 진행하며 그 과정을 기록합니다.
지속적인 수정과정을 거칠테니 오류나, 참고점이 있으면 남겨주세요 :)

들어가기

  • 새로운 프로젝트에 참여하게 되었다.
  •  Git 이라고는 init, commit, push만 해보았는데 'MR를 해서 branch를 열어라!'
  • 이건 대체 어떻게 하라는거지?

개요

  • 최초 Fork, Clone, Remote
  • Branch란?
  • local, remote에 branch 생성
  • add, commit, push
  • Merge Request

 

1. 최초 Fork, Clone, Remote

1.1 Fork

Fork는 수정을 위해 다른사람의 Repository를 내 Repository로 그대로 복제하는 기능이다
Fork를 진행할 시 가져온 Repository가 추후에 변화(ex. commit)등이 발생하여도 그대로 내 repository에 반영된다.
이때 fetch ,rebase의 과정이 필요하다 -> 추후 설명

제 프로젝트는 권한이 부여되어있으므로 fork를 하지 않고 작업 Repository에 제 이니셜을 사용하여 진행하였습니다.

우측 상단의 Fork를 사용하여 내 프로젝트에 복제시킨다.

1.2 Clone

원격에서 로컬저장소로 처음 가져올때 사용하는 명령어이다.
init과 비슷하나 원격에서 가져온다는 점의 차이가 있다.

Project의 Git 주소

1.3 Remote

원격과 로컬 저장소를 연결하는 명령어이다.
#원하는 폴더로 이동
cd d:/project 

#git clone
git clone https://git.oooo.net/aaa/bbb/ccc.git

#remote 추가하기
$ git remote add origin(별명) https://git.oooo.net/aaa/bbb/ccc.git

# 원격 저장소 설정 확인
$ git remote -v

 

2. Branch란?

어떠한 프로그램을 작성할 때 각각의 branch 즉, 복사본을 생성하여 그 공간에서만 작업을 진행한다.
각자의 Branch에서 작업을 하지 않으면 서로 다르게 수정한 부분에 대하여 Conflict(충돌) 발생 위험이 있다.
Git은 최초로 Master 이라는 Branch를 생성한다.

2.1 Branch 네이밍 규칙

1) master branch (이름유지)

배포 가능한 상태를 유지하는 branch이다. 함부로 merge(병합)하지 말자.

 

2) develop branch (이름유지)

개발된 새로운 기능들을 병합하기 위한 branch이다. 새로운 기능들이 안정적 이라면 develop branch를 master branch에 merge(병합)시킨다.

주로 이 branch에서 branch를 따서 기능들을 개발한다.

 

2) feature branch

  • master, develop, release-, hotfix- 외 어떤 이름도 가능하다.

  • feature/기능요약 형식을 사용한다.

    • ex) feature/login, feature/signup, feature/this-is-fuxxing-awesome

  • 이슈에 대한 branch 라면 feature/(issue_num)-(feature_name) 형식을 사용한다.
    • ex) feature/1-JPA, feature/2-build-gradle
  • 현 프로젝트에서는 feature/이니셜/(feature_name)을 애용하자.
    • ex) feature/RY/3-naming

3) release branch

  • release-... 또는 release/... 를 사용한다.

    • ex) release/v1.0.0, release-1.2

4) hotfix branch

  • hotfix-... 또는 hotfix/... 를 사용한다
    • ex) hotfix-1.2.1, hotfix/1.2.1

3. Branch 생성

자신이 작업할 remote branch 와 local branch를 생성해 본다.
#branch 목록 보기
git branch

#새로운 로컬 branch 생성하기
git branch 'name'

#브랜치 이동하기
git checkout 'name'
#(master -> 'name') 로 이동됨을 확인할 수 있습니다.

#새로 만든 로컬 branch를 remote branch에도 생성하기 
git push origin 'name'

#local과 remote 저장소를 연결하기
git branch --set-upstream-to origin/'name'

4. add, push, commit

Local에서 작업을 마쳤다면 remote 저장소로 옮기는 작업을 한다.
#Stage에 추가하기 (가상의 준비영역)
git add .            #모든 수정된 파일 추가
git add file.txt     #file.txt 만 추가

#stage에 추가된 파일 제외하기 (commit을 달리하거나 빼고싶을때)
git rm --cached file.txt

#commit으로 log 남기기
git commit -m 'issue-4 solved'

#log 확인하기
git log 

#push로 remote 저장소에 올리기
git push <저장소명> <브랜치명>
git push origin feature/RY/2-signup

#인자 생략하기
$ git push -u origin feature/RY/2-signup # 최초로 한번 해주면 그 후는 인자 없이 git push로 진행하면 됩니다.

5. Merge Request

자신이 한 작업이 완료가 되고 remote 저장소로 다 push 하였다면
기존의 feature과 merge(병합)을 하여 수정된 부분이 기존것에 반영되도록 한다.

좌측메뉴의 Merge Request -> New merge request

 

Source branch를 Target branch에 합친다

1) Source branch에는 내가 push까지 끝마친 repository를 선택한다.

2) Target branch에는 합쳐질 상위 branch를 선택한다. ex) develop

 

추가사항들

  • Title - 주요 커밋 메시지중 하나를 선택하여 작성한다.
  • Description - 커밋 메시지의 적용 항목들을 작성한다.
  • Assignee - Merge request를 승인해줄 관리자를 선택한다.
  • Reviewer - review 요청할 사람을 선택한다.
  • Milestone - MR milestone
  • Labels - MR Label
  • Merge options
    • 현재 MR의 브랜치를 제거하면서 Merge를 실행합니다.
    • MR에 쌓여있는 커밋 리스트를 하나의 커밋으로 묶어서 Merge를 실행합니다.