DevOps/Git

git & GitHub 기초 개념

arsenic-dev 2024. 9. 24. 23:06

git & GitHub

파일

파일(수정)

파일(수정1)

파일(최종)

파일(진짜 최종)

파일(이게 진짜 최종)

파일(이게 진짜 진짜 최종)

어떻게 하면 버전을 잘 관리할 수 있을까?

git

코드 관리하는 것으로, 버전 관리 도구이다.

이를 통해 여러 개 코드 합치기, 이전 버전으로 돌아가기 등이 가능하다.

 

github

코드 저장소이다.

git으로 관리한 코드는 push를 통해 GitHub에 업로드가 가능하다.(git과 GitHub은 연동)

Commit, Push/Pull

▶ commit, push/pull

1. Commit

Commit(로컬 작업 디렉토리 -> 로컬 저장소)

작업을 했다면 작업 내용을 저장해야 하는데,

이때 git에서 변경 내용을 저장하는 것을 commit이라고 한다.

 

로컬 PC의 작업 추가 또는 수정 내용을 깃 로컬 저장소에 저장한다.

 

이때, commit, 즉 업데이트한 내용을 commit message로 기록할 수 있는데,

이 메시지는 다음과 같은 이유로 convention에 맞게 commit message를 작성해야 한다.

  • 메시지가 여러 개 쌓였을 때 가독성 향상
  • 협업 시 상대도 이해할 수 있는 메시지로 유지 보수성 향상(원활한 협업)

Commit Message 구성

type: subject

body

footer
  • subject: 제목, 마침표 사용 X
  • body: 변경한 내용과 이유 설명. 어떻게 보다는 무엇을, 왜 변경하였는지 설명(기존 문제가 무엇인지 명확히 하기)
  • footer: issue 트래커 작성
git commit -m "subject

body

footer"

▶ 터미널에서 commit message 작성하는 코드

 

Commit Type 예시

  • feat: 새로운 기능을 추가
  • fix: 버그 수정
  • refactor: 코드 리팩토링
  • style: 코드 형식, 정렬, 주석 등의 변경(동작에 영향을 주는 코드 변경 없음)
  • test: 테스트 추가, 테스트 리팩토링(제품 코드 수정 없음, 테스트 코드에 관련된 모든 변경에 해당)
  • docs: 문서 수정(제품 코드 수정 없음)
  • chore: 빌드 업무 수정, 패키지 매니저 설정 등 위에 해당되지 않는 모든 변경(제품 코드 수정 없음)
  • init : 처음 프로젝트가 시작되었을 때
  • rename: 파일/폴더명을 수정한 경우
  • remove: 코드(파일)의 삭제가 있을 때
  • improve: 호환성, 검증 기능, 접근성 등에서 향상이 있는 경우
  • move: 코드의 이동이 있는 경우
  • updated: 문서, 리소스, 라이브러리 등 계정이나 버전 업데이트가 있을 때 사용
  • comment: 필요한 주석 추가 및 변경

2. Push/Pull

Push(로컬 저장소 -> 원격 저장소)

commit을 진행하고, 작업이 완료되면 commit들을 remote repository(원격 저장소)에 push 해야 한다.

 

로컬 저장소의 추가 또는 수정 내용을 깃 원격 저장소에 최종 업로드하는 것을 말한다.

 

Pull (원격 저장소 -> 로컬 저장소 -> 로컬 작업 디렉토리에 병)

원격 저장소의 변경 이력을 로컬 저장소로 다운한다.

 

이때 pull = fetch + merge로 다운한 변경 이력이 바로 로컬 작업 디렉토리에 적용된다.

 

※ fetch는 원격 저장소의 변경 사항을 로컬에 다운로드하는 것을, merge는 다운로드한 변경 사항을 현재 로컬에 병합하는 것을 의미한다.

 

공동 작업하다 보면, 다른 사람이 코드를 업데이트 하면 내 로컬에는 적용이 안 되어 있는데,

이때 pull을 이용해 원격 저장소의 내용을 다운해야 하기에 pull은 공동 개발에 자주 이용된다.

Branch

Branch로 보는 개발 흐름

 

Branch

원래 의미인 나뭇가지라는 뜻처럼,

나무가 가지에서 새 줄기를 뻗는 듯 여러 갈래로 퍼지는 개발 흐름을 뜻한다.

 

보통, 쓰는 용도에 따라 Branch를 나누며,

새로운 Branch가 생성되더라도 기존의 Main Branch는 유지되어야 한다.

 

이러한 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있어 협업시 쓰인다.

 

분기된 Branch를 다시 하나의 Branch로 합치는 Merge 과정에서 Conflict가 많이 발생하는데,

이때 Conflict가 발생하지 않도록 주기적으로 Pull 하며 작업해야 한다.