멤버 초대하기

  • GitLab 프로젝트 Settings - Members - Project members - Invite member
  • Maintainer : 해당 프로젝트에 대한 모든 권한을 가지고 있는 최상위 사용자
  • Guest : 가장 낮은 등급의 사용자, 제대로 개발에 참여할 수 없음
  • 최소 Developer 등급이 되어야 개발에 참여 가능 → 등급 변경

 

Fork

  • 원본 프로젝트의 복제본을 만드는 것
  • 복제된 프로젝트를 git clone해서 컴퓨터에 저장, 작업 후 복제된 프로젝트에 push

 

Merge Request (MR)

  • 복제된 프로젝트에서 원본 프로젝트에 merge request를 보냄→ 작업한 내용을 원본 프로젝트에 반영해달라는 의미
  • merge request 승인 또는 거절
  • GitLab 사이트에서 Merge Request 하기
    1. Create Merge Request 클릭
    1. Change branches 에서 Source branch, Target branch 선택
    1. Title, Description 작성
    1. Assignee : MR을 가장 먼저 점검해야할 담당자
    1. Discussion을 통해 MR에 대한 논의 가능
    1. 담당자가 Merge 버튼을 클릭해서 병합함
  • Settings - General - Merge request 에서 Merge method 선택 가능-기본 값은 Merge commit → 항상 커밋 생성
  • -Fast-forward merge : Fast-forward merge가 가능할 때는 따로 커밋을 생성하지 않음

 

git push --force
  • 강제로 GitLab 서버의 커밋 로그를 덮어쓰게 함 (실무에서는 절대 사용 X)
  • Fast-forward merge 옵션을 선택한 후 다시 merge하면 새로운 커밋이 생기지 않음

브랜치 Branch

  • 특정 커밋을 가리키는 포인터
  • 기본 branch : master
  • HEAD는 master branch를 통해 commit을 가리키고 있음
  • origin/master : GitLab 서버에 있는 master branch

 

브랜치 생성하기

💡
git branch {branch_name}
git branch develop

 

브랜치 전환하기

💡
git checkout {branch_name}
git checkout develop
  • HEAD를 develop 브랜치를 가리키도록 변경

 

모든 log 확인

💡
git log —all —graph
  • —all : HEAD가 가리키는 branch뿐만 아니라 모든 branch를 보겠다
  • —graph : branch와 commit 간의 관계를 그래프 형식으로 보여라

 

브랜치 병합하기

💡
git merge {branch_name}
  • 현재 HEAD가 branch를 통해 가리키고 있는 커밋merge 뒤에 쓴 branch가 가리키고 있는 커밋을 합침

 

git checkout develop
git merge feature-attack
  • 새로운 커밋을 만들지 않고 당기는 경우 → fast-forward merge

 

브랜치 병합 충돌

  • 필요한 코드만 남기고 커밋
  • 새로운 커밋이 생김 → non fast-forward merge

 

GitLab에 push

git push -u origin develop

 

외부 저장소에 프로젝트를 저장할 경우 장점

  1. 프로젝트 복구 가능
  1. 협업과 동시에 버전 관리 가능

 

 

Remote repository란?

  • GitLab에서 생성한 프로젝트 url (https~) 복사
💡
git remote add origin 프로젝트url
  • git remote : 내 컴퓨터에서 외부 저장소에 관한 작업을 할 때 사용
  • add origin url : URL이 가리키는 외부 서버의 프로젝트를 원격 저장소로 지정하는데 이름은 origin이라고 할게

 

 

Git push/Git pull

💡
git push -u origin master
  • 내 컴퓨터의 프로젝트 디렉토리 내용을 origin이 가리키는 원격 저장소의 프로젝트로 업로드한다는 뜻
  • 실행하면 인증 절차를 거쳐야함
  • .git 디렉토리 내부에서 관리되던 Repository 영역을 업로드한 것

 

  • 이미 앞에서 add를 해주었기 때문에 origin이 가리키는 원격 저장소를 이미 알고 있다
  • 따라서 앞으로는 git push만 입력하면 된다.

 

  • 새로운 폴더를 만들어서 또 다른 사용자를 만든다면?
    💡
    git clone 프로젝트url
    • GitLab 서버에 있는 프로젝트를 맨 처음에 가져올 때 git clone을 실행해야함
    💡
    git push
    • 원격 저장소에 있던 프로젝트를 clone한 것이기 때문에 git push만 입력하면 된다.

 

💡
git pull
  • GitLab 프로젝트에서 새로운 commit이 생성되었을 때 해당 commit을 다시 내 컴퓨터로 가져오려면? → git pull

 

  • 왜 origin일까?
    • 가장 근원이 되는 파일 → GitLab 서버에 있는 프로젝트 파일
    • 관습적으로 외부 저장소에 존재하는 프로젝트를 origin이라는 이름으로 가리킨다.

 

❗ push 하기 전에 반드시 pull 먼저 하기 ❗

Git reset

  • HEAD : 현재 내가 위치해있는 commit을 가리키는 식별자
  • HEAD가 가리키는 commit을 변경함
💡
git reset —hard 커밋아이디
  • HEAD가 첫번째 커밋을 가리킴 → Working Directory의 내용도 첫번째 커밋 시점으로 바뀜 (hard 옵션을 사용했기 때문에)

 

Soft/Mixed/Hard 옵션의 차이

Hard

  • Working Directory가 바뀐다.
  • Staging Area가 바뀐다.

Mixed

  • Working Directory는 건드리지 않는다.
  • Staging Area가 바뀐다.

Soft

  • Working Directory는 건드리지 않는다.
  • Staging Area를 건드리지 않는다.

 

💡
git status
  • git 상태를 더 자세히 확인

 

  • hard는 위험한 옵션 → 바로 직전 commit으로 되돌아가서 Working Directory에서 작업하던 내용이 사라져도 괜찮을 때 사용
  • soft : 내가 작업하면서 만든 Staging Area가 그대로 남아있어 바로 commit 가능
  • mixed : Staging Area가 바뀌므로 최근 작업했던 상태를 commit으로 남기고 싶다면 반드시 git add를 하고 commit 해야한다.
  • 그래서 soft나 mixed 옵션은 언제 사용하는건지?

    commit 01~06까지 작업해둠. reset으로 commit 03으로 돌아간 다음 추가 작업을 하고 commit을 하면 commit 03 다음에 commit 07이 쌓이게 된다. → 제대로 된 커밋들만 깔끔하게 남길 수 있다.

 

Git 히스토리 관리하기

 

💡
git reflog
  • git reflog = git reference log : HEAD가 가리켰던 Commit 기록을 모두 보여주는 명령어

 

💡
git reset —hard HEAD@{number}
  • commit ID 대신 commit에 대한 HEAD@{number}을 입력해도 된다.

버전관리 시작하기

  • 바탕화면에 RacingGround 폴더 생성
  • VS Code에서 RacingGround 폴더 열기, 파일 작성
  • RacingGround처럼 프로젝트 내용을 담고 있는 폴더를 프로젝트 디렉토리라고 한다.
  • Git 명령어는 프로젝트 디렉토리 안에서 실행해야 한다.

git 초기화

💡
git init →Initialized empty Git repository in 경로
  • git으로 버전 관리를 할 수 있는 상태가 됨
  • RacingGround 폴더 안에 .git 폴더가 생성됨
  • .git폴더 → git으로 인해 버전 관리가 되고 있는 디렉토리
  • 기본적으로 숨김 파일 처리가 되어있음

git 사용자 정보 설정

💡
git config user.name "이름" git config user.email "이메일주소"
  • config = configuration, 설정
  • 프로젝트 디렉토리에 버전을 남길 때마다 설정한 이름, 이메일이 남는다.

특정 버전 저장

  • → commit 한다고 한다.
  • 특정 버전 = commit
  • commit 하는 것은 3가지 영역을 바탕으로 작동한다.
    1. Working Directory

      -실제로 다루고 있는 RacingGround 디렉토리같은 프로젝트 디렉토리 자체를 의미

    1. Staging Area

      -특정 버전으로 관리하고 싶은 파일들을 모아두는 장소

    1. Repository

      -특정 시점의 Staging Area의 모습을 commit으로 남기면 해당 commit들이 저장되는 장소

    • Working Directory에서 작업을 하다가 commit을 하고 싶다 → commit을 남기고 싶은 모든 파일들을 Staging Area에 올린다. → commit 명령어 실행 시 해당 시점에 Staging Area에 있던 모든 파일들이 그대로 하나의 commit으로 Repository에 저장된다.

Staging Area에 올리기

💡
git add BasicCar.js README.md #특정 파일 지정 git add . #새롭게 만들어지거나 수정된 모든 파일

Commit 하기

💡
git commit -m "커밋 메세지"
  • -m : 해당 commit에 대한 설명을 의미
  • 왜 Working Directory에서 바로 Repository로 저장하지 않고 중간에 Staging Area가 있는가?

    → 지금 당장 commit을 남기고 싶지 않은 파일이 존재할 수 있기 때문

Commit 기록 확인하기

💡
git log
  • commit log 또는 commit history라고 한다.
  • 각 commit을 고유하게 식별할 수 있는 commit ID가 있다.
  • Author : commit을 한 사용자에 대한 정보
  • 기록 확인을 끝냈으면 q 입력

Commit 비교하기

💡
git diff 커밋아이디1 커밋아이디2
  • git이 값을 구분할 수 있을 정도만 아이디를 적으면 된다. (앞 4글자 정도)

Git이 무엇일까요?

  • Git : 프로젝트 버전 관리를 하기 위해 사용하는 프로그램
  • 주요 기능
    1. 버전 관리-소프트웨어 개발 시 기능 추가, 버그 수정 등 코드 수정/추가/삭제 작업이 계속 이루어짐 → 버전 관리 필요
    1. 협업-여러 개발자들간의 협업

 

Git과 GitLab의 차이

  • Git으로 관리한 프로젝트를 저장할 서버 필요→ Git 기반의 저장소 서비스 (GitHub, GitLab)
  • Git ≠ GitLab ‼

 

Git 설치하기 (Windows & Mac)

  • Git Bash : Git 사용에 특화된 명령어 실행기→ Git 설치 시 반드시 Git Bash Here 체크!
  • Git Bash 검색해서 콘솔창 확인

+ Recent posts