본문 바로가기
공부/Git, GitHub

Git 개념 정리

by namda-on 2020. 7. 27.

Git 개념 정리

Git 이란

: 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'이다. Git을 활용하면 소스 코드가 변경된 이력을 쉽게 확인할 수 있고, 특정 시점에 저장된 버전과 비교하거나 특정 시점으로 되돌아갈 수도 있다.

repository

Git 은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.

  • 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소이다.
  • 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소이다.

Commit

파일 및 풀더의 추가/변경 사항을 이러한 저장소에 기록하려면 'commit' 을 해야한다. commit을 할 경우 이전 commit 상태부터 현재 상태까지의 변경 이력이 기록된다.

Git은 가능한 한 커밋을 가볍게 유지하고자 하기때문에, 커밋할 때마다 디렉토리 전체를 복사하않고 저장소의 이전 버전과 다음 버전의 변경내역("delta"라고도 함)을 저장한다.

commit message의 권장 양식

-m "

  1. 커밋 내의 변경 내용을 요약( type: subject )
  2. 빈 칸
  3. 변경한 이유 (자세한 설명)

"

Commit Type

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • docs : 문서 수정
  • style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
  • refactor: 코드 리펙토링
  • test : 테스트 코드, 리펙토링 테스트 코드 추가
  • chore : 빌드 업무 수정, 패키지 매니저 수정

좋은 commit message 에 대한 convention

https://djkeh.github.io/articles/How-to-write-a-git-commit-message-kor/

Merge 하기

내가 끌어온 저장소가 최신 버전이 아닌 경우, 즉 내가 pull 을 실행한 후 다른 사람이 push를 하여 원격 저장소를 업데이트 해버린 경우에는 내 push 요청이 거부된다. 이러한 경우 병합(merge)이라는 작업을 진행하여 다른 사람의 업데이트 이력을 내 저장소에도 갱신해야한다. 만약 병합하지 않은 채로 이력을 덮어쓰게 되면 다른 사람이 push한 업데이트내역이 사라지기 때문이다!

이 때, 원격 repository 와 로컬 repository에서 파일의 동일한 부분을 변경한 경우 충돌이 발생한다. 충돌이 발생시에는 직접 코드를 수정하여 merge해야 한다.

Branch

여러명이서 협업하여 소프트웨어를 개발할 때에 동일한 소스코드를 여러명이서 함께 공유하고 다룬다. 이 때 각각 서로 다른 버전의 코드가 만들어질 수 밖에 없는데 이를 가능케 해주는 것이 Branch이다. 각자 독립적인 repository 안에서 마음대로 소스코드를 변경할 수 있고, 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어낼 수 있다.

즉, 여러 명이서 동시에 작업을 할 때에 다른 사람의 작업에 영향을 주거나 받지 않도록, 먼저 메인 브랜치에 자신의 브랜치의 변경 사항을 적용한다.

-통합 브랜치(Integration Branch)

언제든지 배포할 수 있는 버전을 만들 수 있어야 하는 브랜치이다. 따라서 안정적인 상태를 유지하는 것이 중요하며 일반적으로 master 브랜치를 통합 브랜치로 사용한다.

-토픽 브랜치 (Topic Branch)

기능 추가나 버그 수정과 같은 단위 작업을 위한 브랜치이다. 토픽 브랜치에서 특정 작업이 완료되면 다시 통합 브랜치에 병합하는 방식으로 진행된다. (feature branch 라고 하기도 함)

 

 

참고자료 :

https://backlog.com/git-tutorial/kr/

https://learngitbranching.js.org/