git은 2개의 저장소를 가지고 있어요
여러 사람과 함께 공유 할 수 있는 원격(remote) 저장소
내 PC 저장해 사용하는 로컬(local) 저장소
로컬 저장소를 통해 내 PC에서 내가 맡은 요건들을 개발하고, 내가 만든 자랑스러운 소스들을 원격 저장소에 올리면 다른 PC에서도 해당 소스들을 각자의 저장소에 옮겨 기존 작업된 소스들과 함께 갖고 있거나 합쳐 원격 저장소에 다시 올릴 수 있어요.
로컬에서는 내가 실수를 하던말던 괜찮아요. 그러나 원격 저장소에 올릴 경우 여러 개발자와 같은 브랜치를 공유 할 수 있기 때문에 혼선이 생길 수 있어 주의해야해요.
자 그럼 이번에는 로컬에서부터 원격의 repository까지 내 소스들이 어떻게 올려지는지 알아볼까요?
로컬 저장소는 총 3가지의 영역으로 구성되어 있어요.
현재 작업 중인 파일들이 모여 있는 Working Directory
커밋하기 전 커밋할 파일들이 있는 Staging Area
커밋 후 unmodified 상태의 파일들이 모인 Git directory
위 3가지의 영역들은 우리가 개발 한 이 소스들을 원격 저장소에 올릴때 반드시 거치게 돼요.
클론을 통해 원격 저장소로 부터 가져온 나의 폴더 및 파일들은 working directory에 담기게 되고, 하나의 작업 단위가 끝나게 되면 내가 올리고 싶은 파일들을 마트에서 장바구니에 물건 담듯 담게되요.
장바구니는 staging area, 담는 물건들을 소스 파일들이라 생각했을때, 소스 파일들을 staging area에 담기 위해 사용하는 명령어가 바로 git add에요.
특정 파일을 담고 싶을 경우
git add <파일 경로>
내가 작업한 모든 파일들을 담고 싶은 경우
git add .
이렇게 untracked 또는 modified 상태에 있는 파일들이 staging area에 올라가게되면 staged 상태로 변경되게 되고 repository로 갈 준비를 마치게 돼요.
자 이제 물건들을 다 골랐으면 카운터에서 계산하고 영수증을 받겠죠?
영수증이 내가 이 물건들을 샀다라는 증거가 되는 것처럼 우리도 commit을 통해 staged area에 있던 파일들을 repository에 올린 증거를 남기게 돼요. 이때 사용하는 명령어가 git commit 이에요.
git commit -m "커밋 내용"
-m 옵션을 통해 해당 commit에 대한 내용을 작성 할 수 있게되고 기록할 커밋의 내용까지 뒤에 함께 적어주면 해당 파일들은 git directory에 저장되어 원격 저장소로 가기 전 준비를 마치게 돼요.
이제 local repository의 commit 내역들을 원격 저장소에 반영해요.
git push
를 하게되면 변경 사항들이 원격 저장소 (remote)에 반영되요.
push 하기 전 fetch 또는 pull을 통해 현재 있는 local branch가 최신화 되어 있는지 반드시 확인하고, 그 외 master와 싱크를 맞추거나 rebase로 인해 강제로 push해야 되는 상황에 대해서는 다른 글을 통해 추가적으로 더 설명할게요.