슬기로운 개발자생활/DevOps

Git 기초 개념과 활용

개발자 소신 2024. 1. 5. 08:08
반응형

개인프로젝트를 진행할 때나, 팀단위 프로젝트를 진행할 때 git을 주로 사용한다. 팀으로 협업을 할 때에는 코드 컨벤션뿐 아니라 git 컨벤션을 필수적으로 정하는 것을 보면 깃을 통한 협업은 개발쪽에서 필수가 되었다.

Git

컴퓨터파일의 변경사항을 추적하고 여러 사용자들 간의 작업 조율을 위한 분산 버전 관리 시스템, 인터넷 연결 없이도 동작하는 독립적인 이력관리, 버전추적 등 기능을 갖춘 저장소

순서

  1. Git 기본 개념
  2. git 기본 명령어
  3. git 설정
  4. git 협업 명령어

1. Git 기본 개념

  • 저장소 : .git 폴더가 있는, git으로 관리되고 있는 폴더
    • 로컬저장소 : 내 컴퓨터에 저장
    • 원격저장소 : github, gitlab등 웹 서버에 저장
      repository
  • 커밋 : 변경사항을 기록하여 하나의 버전으로 상태를 저장
  • 브랜치 : 독립적인 작업을 진행하기 위해 사용

2. git 명령어

  • git init : 현재 working directory를 git으로 관리하겠다 선언
    • git init한 폴더 안에서 새로운 폴더를 생성하고 git init을 하지 않음
  • git add : 특정 파일이나 폴더의 변경사항들을 commit 전 변경된 상태(staged)로 올림
  • git commit : staged된 파일, 폴더를 하나의 버전으로 기록
    • 이 때 staged된 변경사항들은 unmodified (변경되지 않음)상태로 변경
      status
  • git push [원격저장소] [브랜치] : 원격저장소에 해당 브랜치 상태를 업로드
  • git pull [원격저장소] [브랜치] : 원격저장소에 해당 브랜치 상태를 가져옴
  • git clone [원격저장소] : 원격저장소를 내 컴퓨터에 다운로드
git init
git add [파일, 폴더 ...]
git commit -m "commit message"

git push origin master # origin 원격저장소 master 브랜치에 커밋내역을 push(업로드)

git pull origin master # origin 원격저장소 master 브랜치 커밋을 pull(다운로드)

git clone https://github.com/sosin/package.git # 내 컴퓨터에 해당 원격저장소를 다운로드

위의 명령어가 가장 기본적으로 변경사항을 추적하고 버전을 관리, 원격저장소에 업로드하여 백업하기 위해 사용하는 명령어

  • 파일은 맨처음 생성되면 Untracked(추적되지 않음) 상태가 되며 add, commit하면 Unmodified(수정되지 않음) 상태로 변경된다. 동일 파일을 수정하면 Modified 상태가 되고, add commit을 통해 다시 Unmodified 상태로 변경된다.
    한 가지 주의할 점은 파일을 삭제할 경우 staged로 삭제된 상태를 올린 뒤 commit을 해야 Untracked상태가 된다.

3. git 설정

  • git config 설정
    1. git config --global user.name [이름]
    2. git config --global user.email [이메일]
  • 원격저장소 연결 및 해제 (git으로 관리되는 폴더에서)
    • git remote add [원격저장소 별명] [원격저장소 주소]
    • git remote remove [원격저장소 별명]
git remote add origin https://github.com/sosin/sosin_package.git
git remote remove origin

4. 협업 명령어

  • branch : 독립적인 기능 개발을 위해 사용
    branch
  • 현업에서 사용하는 gitflow는 주로 다음과 같은 브랜치 규칙을 가짐
    gitflow
  • master : 실제 서비스 운영 브랜치
  • hotfix : 크리티컬한 문제를 해결하기 위한 브랜치
  • release : 실제 운영하기 전 QA, 테스트를 위해 배포하는 브랜치
  • develop : 단위 기능단위로 합쳐지고 테스트하는 개발 상태의 브랜치
  • feature : 단위 기능개발을 위한 branch

주로 feature 브랜치는 작업이 종료된 후 develop 브랜치와 merge 후 삭제한다.

  • git checkout -b [브랜치 이름] : 새로운 브랜치 생성 (현재 브랜치의 상태를 기준으로)
  • git merge [브랜치 이름] : 해당 브랜치의 상태를 현재 브랜치와 병합
  • git brnach -d [브랜치 이름] : 브랜치 삭제 (-D: 강제 삭제)
git checkout -b feat/back/login

### 개발

git add .
git commit -m "add auth login"
git checkout develop

git merge feat/back/login

git branch -d feat/back/login

git checkout -b feat/back/signup

### 이어서 작업 (반복 반복 반복)

브랜치 간 충돌이 났을 때 해결 방법

깃을 관리하다보면 서로 다른 버전에서 파생된 브랜치에서 같은 파일을 수정한 경우 합칠 때 충돌이 발생할 것이다. (같은 파일을 수정하지 않으면 충돌은 없음)

  • git pull origin develop --rebase : rebase 옵션을 주면 해당 브랜치를 base부터 다시 받아온다.
    • rebase할 경우 내가 작업한 것과 충돌난 것을 해결할 수 있는 옵션이 나온다 (VScode 기준)
    • 내가 작업한 것만 적용, 원격저장소에 있는 상태로 적용, 둘다 동시적용 세 가지 옵션이 있고 충돌난 파일을 각각 수정한 뒤 commit, push하면 충돌을 해결하고 해당상태로 원격저장소에 올릴 수 있다.

충돌을 해결할 때는 vscode에서 지원하는 기능이 상당히 편하기 때문에 주로 vscode로 해결한다.

반응형