본문으로 바로가기

0. 환경

  • m1 macbook
  • IntelliJ (Vscode 등 다른 툴을 활용해도 됩니다.)
  • git version 2.37.0

 

1. Git을 사용하는 이유

VCS(Version Control System)

• 프로그램의 버전 관리를 위한 툴
• 프로젝트의 시간과 차원을 관리한다.

 

시간 관리 (commit)

개발은 첫 버전에서 끝나지 않고 계속해서 새로운 버전이 나오게 되는데 이러한 시간(버전) 관리에 유리합니다.

• 특정 작업을 취소하는 작업을 할 수 있습니다. (git reset) 

 

차원 관리 (branch)

 한 폴더에 있는 프로젝트의 내용을 여러 가지 형태로 활용 가능하고 전환 가능합니다.

운영 | 테스트 | 신규 기능 개발 등의 형태로 관리할 수 있고 자유로운 전환이 가능합니다. (하나의 프로젝트 폴더에서!)

 

SVN vs GIT

[델타 방식 vs 스냅샷 방식]

델타 방식(SVN)

델타 방식

파일이 처음 생성되었을 때에만 파일 전체 내용이 저장이 됩니다.

그 이후에는 파일에 수정이 생길 경우 해당 변경점들만 저장함으로 버전 관리합니다.

보기에는 변경점만 저장하여 효율적으로 저장되는 것처럼 보이지만 변경점에 대해 연산 처리가 필요하므로 속도가 느립니다.

 

스냅샷 방식(GIT)

스냅샷 방식

새로운 버전이 만들어질 때 해당 버전에서의 각 파일이 최종 상태 그대로 저장이 됩니다.

비효율적으로 저장되는 것이 아닌가? 생각할 수도 있지만 용량을 크게 차지하지 않는 효율적인 방식으로 관리를 하게 처리되어있으므로

용량에 대해서는 크게 신경 쓸 필요가 없습니다. 따라서 델타 방식과는 다르게 연산이 필요하지 않아 속도가 빠릅니다.

 

[중앙 집중식 버전 관리 vs 분산 버전 관리]

중앙 집중식 버전 관리(SVN)

중앙 집중식 버전 관리

SVN의 경우에는 중앙 집중식으로 원격 저장소 서버에 모든 관리 내역들이 저장이 됩니다.

그리고 개발에 참여하는 개발자들은 중앙에서 다운로드한 버전으로만 작업할 수 있습니다.

원격 저장소 서버에 의존적이며 따라서 인터넷이 되지 않을 경우엔 로컬에서 작업이 제한적입니다.

 

분산 버전 관리(GIT)

분산 버전 관리

Git은 분산 형태로 관리하여

원격 저장소 서버에 있는 프로젝트를 받아오면 파일들 뿐만 아니라 전체 Git 커밋과 브랜치들까지 받아지므로

인터넷 연결 상태랑 상관없이 로컬에서 자유롭게 작업을 할 수 있습니다.

즉 모든 개발자들이 Git 상태까지 공유하기 때문에 push, pull로 동기화하면서 편하게 협업을 할 수 있습니다.

 

해당 내용은 https://git-scm.com/book/ko/v2 에서 더 자세히 확인할 수 있습니다. 

 

2. Git의 세 가지 상태(중요)

Git의 세 가지 상태

Git을 사용하기 위해서는 Git의 세 가지 상태에 대해서 꼭 숙지하고 있어야 합니다.

 

Working Directory

새로 파일이 추가 그리고 기존 파일이 수정삭제되는 수정사항이 만들어지면 위치하는 공간

 

[파일의 상태]

Untracked File : 추적하지 않는 파일
: Add 된 적 없는 파일(새로 추가된 파일), ingnore 된 파일

Tracked File : 추적하는 파일
: Add 된 적 있고 변경내역이 있는 파일

 

[상태 이동]

git add 명령어를 사용하여 Staging Area로 파일을 이동합니다.

 

Staging Area

파일을 옮기거나 압축을 하기 위해 존재하는 공간
커밋을 위한 준비 단계(작업을 위해 선택된 파일들)

 

[상태 이동]

git commit 명령어를 사용하여 Repository로 파일을 이동합니다.

Working Dir로 다시 이동을 원한다면 git rm --cached <파일> 명령어를 활용합니다.

 

Repository

.git 디렉터리라고도 불림 (git init 명령어로 해당 프로젝트에 대해 git으로 관리하기 시작하면 생성되는 디렉터리)
파일이 커밋된 상태

 

[상태 이동]

이전 커밋 상태(과거의 버전)로 이동을 원한다면 git reset 명령어를 활용합니다.