Git 개념 정리
Git 이란
: 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'이다. Git을 활용하면 소스 코드가 변경된 이력을 쉽게 확인할 수 있고, 특정 시점에 저장된 버전과 비교하거나 특정 시점으로 되돌아갈 수도 있다.
repository
Git 은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.
- 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소이다.
- 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소이다.
Commit
파일 및 풀더의 추가/변경 사항을 이러한 저장소에 기록하려면 'commit' 을 해야한다. commit을 할 경우 이전 commit 상태부터 현재 상태까지의 변경 이력이 기록된다.
Git은 가능한 한 커밋을 가볍게 유지하고자 하기때문에, 커밋할 때마다 디렉토리 전체를 복사하않고 저장소의 이전 버전과 다음 버전의 변경내역("delta"라고도 함)을 저장한다.
commit message의 권장 양식
-m "
- 커밋 내의 변경 내용을 요약( type: subject )
- 빈 칸
- 변경한 이유 (자세한 설명)
"
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 라고 하기도 함)
참고자료 :