namu445 2022. 5. 10. 14:59

git을 사용하는 이유

  • git은 버전 관리 도구입니다. 형상관리 도구라고도합니다.
  • 프로젝트 협업 도구입니다.
    • commit 단위로 code의 변경과정을 기록하고 모니터링할 수 있습니다.
    • main, dev 기능별 브랜치를 생성하고 합치며 분업과 협업 안정적인 배포에 도움이 됩니다.
    • git을 사용하면 현재 코드에 문제가 생겼을 때 비교적 쉽게 정상적으로 작동하던 과거 코드로 복구할 수 있습니다. -> git reset, revert...
    • 스냅샷 방식으로 다른 방식(delta-base?)의 버전 관리 도구 보다 가볍고 빠릅니다. -> delta방식은 코드에 변경이 있으면 파일 전체를 새로 저장하는 듯 하다. 
  • git만 설치해서 사용할 수 있지만 github와 같은 외부 저장소와 같이 사용합니다.

브랜치 전략

  • 팀 프로젝트를 할 때 팀원간에 약속없이 브랜치를 사용하면 커밋간에 충돌이나 변경이 일어나 레포지토리에 저장된 코드에 오류를 만들고 최악의 경우에 서비스를 배포중인 main 브랜치에도 안좋은 영향을 줄 수 있다.
  • 이를 방지하기 위해서 git을 같이 사용할 때는 main 브랜치와 dev 브랜치를 분리하고 dev 브랜치에서도 기능별로 별도의 브랜치를 만들어 사용한다. 이는 디렉토리 구조와 같이 계획한다.
  • 브랜치를 나누고 사용 규칙을 만들어도 브랜치가 충돌하지 않도록 주의를 기울여 사용해야한다. 

 

깃 브랜치 사용 예시(git-flow)

  • main, dev 브랜치는 항상 존재한다. (작은 규모의 개인 프로젝트는 main 브랜치를 dev브랜치로 사용하기도한다.)
  • main(master): 최종버전이 올라오는 브랜치 서비스가 가능한 수준의 안정적인 코드가 올라오며 CI/CD를 적용하여 제품 서비스 서버에 자동 배포를 진행하기도 한다.
  • dev: 기능별로 작성한 코드를 통합하고 테스트하는 브랜치 수시로 기능이 붙었다가 사라지는 등 개발을 위해서 비교적 자유롭게 사용한다. (기능별로 작성한 코드는 통합되기전에 어느정도 오류 발생 가능성을 확인한다.) 코드를 main 브랜치에 올리리 전에 최종 테스트용도로 사용하기도 한다.(release 브랜치를 만들어서 관리하기도한다.)
  • feature(기능별로 다양한 이름): 기능별로 작성되고 합쳐지는 브랜치 주로 기능에 따라 이름을 작성한다. dev브랜치에 중요한 업데이트가 있으면 업데이트를 반영하여 새로 만들기도 한다.(dev 브랜치에서 새로운 브랜치를 만들고 개발중이던 feature 브랜치를 합친다.)

주의

  • 같은 기능을 여러명이 개발하지 않는다
  • 하나의 기능을 만들고 pull/push 완료되기 전에 연관된 추가 기능 개발을 하지 않는다 (먼저 올린 커밋이 거부되면 연관된 추가 개발 기능도 당연히 같이 거부되거나 정상적으로 작동하지 않는다)
  • 기능 개발에 많은 시간이 걸린다면 적당히 나눠서 최소 1일 1커밋 한다(완성하고 한번에 올리면 문제가 생겼을 때 수정이어렵다)
  • 공통기능을 개발할 때는 연관성을 주의 깊게 파악하고 신중히 개발한다

git 명령어

  • git 계정 등록
    • git user.name <사용자 이름>
    • git user.email <이메일>
    • user.email은 원격 레포지터리에 접근할 수 있는 메일을 등록해야한다.
  • 레포지토리 복제 
    • git clone <원격 레포지토리 주소>
  • 코드를 작성중인 디렉토리에 git 적용
    • git init
    • 디렉토리에 .git 폴더가 생성되고 하위 디렉토리와 파일의 변경을 트래킹한다.
  • 원격 레포지토리 등록
    • git remote add <원격 repo이름(보통 origin)> <원격 repo URL>
  • 현재 브랜치 확인
    • git branch
    • git branch -v
  • 현재 원격 레포지토리 확인
    • git remote 
    • git remote -v
  • git 상태(스테이징 되지 않은 파일 확인 등) 확인
    • git status
  • 변경 사항 스테이징
    • git add . -> 현재 경로에 변경 파일 모두 스테이징
    • git add <파일 이름> -> 원하는 파일만 스테이징
    • git add -A
    • git reset HEAD -> 현재 스테이징 모두 취소
  • 커밋
    • git commit -m "커밋 메세지"
  • push
    • git push <원격 브랜치>  <로컬 브랜치>
  • pull
    • git pull