정리 방향은 Git 역사, 철학등은 모두 스킵하고, 클라이언트(개발자) 측면에서 필수적인 부분만 정리하고자 합니다.
(참고: Git 이전에는 cvs, svn 등이 있었지만, 현재는 Git이 천하통일(?))
1. What?(Git 이란?)
- 소스코드/리소스를 효과적으로 관리하기 위해 리누스 토르발스가 개발한 분산형 버전 관리 시스템(VSC)이다.
2. How to use?(어떻게 사용)
- "작업 공간에서 작업한 내용을 스테이지에 올려서 로컬 저장소에 커밋하고, 이를 푸시해서 원격 저장소로 보낸다"
1) 작업공간(working space)
- 개인 PC에서 작업내용(코드, 이미지 편집)을 담고 있는 프로젝트 폴더를 말함
2) 스테이지(stage)
- 작업한 내용이 올라가는 임시 영역을 말함 --> 매우 학문적인 표현 ㅠㅠㅠㅠ
- 직관적으로 표현하면, 작업 공간에서 생성/변경이 발생한 파일을 다음 커밋에 반영하기 위해 추적하는 것을 말함
- 스페이지하는 것을 인덱스(index)한다고 표현하기도 함
- 추적되는 파일은 스테이지 영역(stage area)에 넣는다고 함.
cf) 언스페이지(unsatge): 추적을 해제, 즉 스테이지 영역(stage area)에서 제외시킴
[명령어]
- git add : 작업내용을 추적(stage)시키는 명령어입니다.
ex) git add . //현재 폴더의 모든 파일과 디렉토리, 하위 디렉토리에 든 전부를 staging area에 추가한다.
git add 파일 // 파일을 staging area에 추가한다.
- git rm : 작업 내용을 추적해제(unstage)시키는 명령어입니다.
3) 커밋(commit)
- 작업한 내용을 로컬 저장소에 저장하는 과정
- 스테이지(추적) 내용을 하나로 묶는 것을 말함
- commit과 동시에 로컬 저장소에 저장됨
- 직관적으로 표현: 작업공간(working space)의 스페이지(stage, index)내용을 커밋(변경, 추적내용)해서 저장소에 저장
ex) git commit -m "메시지" //메시지는 어떤 내용을 반영했는지를 나타냅
git log // 로컬 저장소(local repository)에서 commit된 이력을 확인
git status // 마지막 commit 이후 작업 공간(work space)에서 변경이 있는 모든 파일을 보여줌
cf) 태그(tag)란? 커밋의 임의 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표를 태그
3) 로컬 저장소(local repository)
- PC에 작업내용이 저장되는 개인 전용 저장소
ex) git init DAS // 로컬 저장소 생성
or
위와 같이 console or GUI를 통해서 작업공간(working space)를 생성하면,
.git 폴더가 생성되는되데, 이곳이 commit된 내용이 들어가는 로컬 저장소(local repository)입니다.
4) 원격 저장소(remote repository)
- 로컬 저장소에 있는 내용을 원격 서버에 여러사람과 공유 또는 공동작업을 위한 저장소
- Push/ Pull
- Push: 로컬 저장소의 내용 중 원격 저장소에 반영되지 않은 커밋을 원격 저장소로 보내는 과정
- Pull: 푸시와 반대로 원격 저장소에 있는 내용 중 로컬 저장소에 반영되지 않은 내용을 가져와서 로컬 저장소에 저장하는 과정을 의미합니다. 이를 통해 다른 팀원이 변경하고 푸시한 내용을 로컬 저장소로 가져올 수 있습니다.
푸시 과정에서 충돌(Collision)이 일어나서 푸시가 거절된 경우, 풀을 통해 원격 저장소의 변경 내용을 반영한 뒤 다시 푸시를 시도해야 합니다.
// NEXT: 실제 실무중심에서 사용하는 명령어 정리
// 예: 원격 저장소에서 로컬 저장소로 소스코드를 복사 --> git clone