"Everything you need to know about Git"
Pro Git 은 Git 의 bible 이라 불립니다.
특이한 점은 대부분의 git 사용자들은 1~3장 까지만 공부하면 된다는 것~
서전 준비:
우선 github 에 아래와 같은 git repository 를 생성 했다.
그리고 내 컴퓨터에는 , Git for Windows 를 설치 했다.
책 내용 소개 시작~
GIt 은 DVCS(분산 버전 관리 시스템) 의 한 종류 이다. Git 에서 클라이언트는 단순히 파일의 마지막 스냅샷을 checkout 하지 않는다. 그냥 저장소를 전부 복제 한다. 서버에 문제가 생기면 복제물로 다시 작업을 시작 할 수 있다. 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다. 모든 Checkout은 모든 데이터를 가진 진정한 백업이다.
Git 의 스냅샷
햣은 데이터를 파일 시스템 스냅샷으로 취급하고 크기가 아주 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.
로컬실행
거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터는 필요 없다. 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령이 순식간에 실행된다.
예를 들어 Git은 프로젝트의 히스토리를 조회할 때 서버 없이 조회 한다. 그냥 로컬 데이터베이스에서 히스토리를 읽어서 보여준다. 그래서 눈 깜짝할 사이에 히스토리를 조회할 수 있다. 어떤 파일의 현재 버전과 한달 전의 상태를 비교해 보고 싶을 때도 Git은 그냥 한 달 전의 파일과 지금의 파일을 로컬에서 찾는다. 파일을 비교하기 위해 리모트에 있는 서버에 접근하고 나서 예쩐 버전을 가져올 필요가 없다.
즉 오프라인 상태이거나 VPN에 연결하지 못해도 막힘 없이 일 할 수 있다. 비행기나 기차 등에서 작업하고 네트워크에 접속하고 있지 않아도 커밋 할 수 있다.
Git의 3가지 상태
Git 은 파일을 Committed, Modified, Staged 이렇게 세가지 상태로 관리한다.
git directory 는 git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 Git directory 가 Git의 핵심이다. 다른 컴퓨터에 있는 저장소를 Clone할 때 Git directory 가 만들어 진다.
working tree 는 프로젝트의 특정 버전을 Checkout한 것이다. Git directory 는 지금 작업하는 디스크에 있고 그 디렉토리안에 압축된 데이터베이스에서 파일을 가져와서 working tree를 만든다.
Staging Area 는 Git 디렉토리에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. 종종 "Index" 라고 불리기도 하지만, Staging Area라는 명칭이 표준이 되어가고 있다.
Git 으로 하는 일은 기본적으로 아래와 같다. (아래는 모두 local 에서 이루어진다.)
1. Working Tree 에서 파일을 수정한다.
2. Staging Area에 파일을 Stage 해서 commit 할 스냅샷을 만든다.
3. Staging Area에 있는 파일들을 commit 해서 Git 디렉토리에 영구적인 스냅샷으로 저장 한다.
Committed : Git directoyr 에 있는 파일들 은 Commited 상태 이다.
Modified : Checkout 하고 나서 파일을 수정 했지만, 아직 Staging Area 에 추가하지 않았다면 Modified.
Staged : 파일을 수정하고 Staging Area 에 추가 했다면 Staged 이다.
<git 설치 및 설정 부분은 생략>
Git 저장소 만들기
PC에, H:\git_study 라는 folder를 만들었다.
Windows 탐색기로 해당 directory 로 이동한후 마우스 오른쪽 클릭, "git bash here" 을 선택
git init
그러면 git_study/.git 이라는 hidden directory가 생긴다.
.git 디렉토리에는 저장소에 필요한 뼈대 파일 (skeleton)이 들어 있다.
이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다.
Git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 한다.
기존 저장소를 Clone 하기
clone은 서버에 있는 거의 모든 데이터를 복사하는 것이다.
git clone을 실행하면 프로젝트 히스토리를 전부 받아온다.
git clone github.com/vdpa4me/pydev.git
위 명령은 "pydev" 라는 디렉토리를 만들고 그안에 .git directory를 만든다. 그리고 저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 checkout 해 놓는다. "pydev" 디렉토리로 이동하면 Checkout으로 생성한 파일을 볼수 있고 당장 하고자 하는 일을 시작할 수 있다.
git clone github.com/vdpa4me/pydev.git myPythonDev
위 명령은 directory name 을 "pydev" 대신 "myPythonDev" 로 생성한다는 점만 다르다.
Working directory 의 모든 파일은 크게 Tracked 와 Untracked 로 나눈다.
Tracked 파일은 이미 스냅샷에 포함돼 있던 파일이다.
Tracked File은 다음 3가지 상태중 하나 이다.
1. Unmodified
2. Modified
3. Staged
Tracked File이 아니면 모두 Untracked file 이다
Untracked file은 working directory 에 있는 file들 중 스냅샷에도 Staging Area에도 포함되지 않은 파일이다.
처음 Repository 를 clone하면 모든 파일은 Tracked 이면서 Unmodified 상태이다.
myPythonDev/README file을 하나 생성해 본다.
git status
README 는 untracked file 이라고 알려 준다. Git 은 Untracked 파일을 아직 스냅샷(Commit)에 넣어지지 않은 파일이라고 본다. 파일이 Tracked 상태가 되기 전까지는 Git은 절대 그 파일을 Commit 하지 않는다.
git add README
git status
"Changes to be committed" 에 들어 있는 파일들은 Staged 상태를 의미한다.
README file을 수정해 보자.
git status
README 는 "Changes to be committed" (Staged) 상태 이면서도
"Changes not staged for commit" 은 수정된 file이 Tracked 상태 이지만, 아직 Staged 상태는 아닌
희한한 상태가 된다.
이 상태로 commit을 하면 최신 변경된 사항이 commit 되는 것이 아니라,
이전에 add 되었던 내용이 commit 된다.
최신 변경된 파일을 Staged 상태로 만드려면, git add 명령을 (다시한번) 실행해야 한다.
git add 명령은
1) 파일을 신규로 tracked 상태로 만들 때도 사용하고
2) 수정한 파일을 Staged 상태로 만들 때도 사용한다.
3) Merge 할 때 충돌난 상태의 파일을 Resolve 상태로 만들때도 사용한다.
git add README
git status
README 가 다시 Staged 상태가 되었다.
Working directory 에 test.txt 를 추가한다.
git status -s[-short]
좀더 간단하게 변경 사항을 보여주는 옵션으로
?? : Untrackable file
A : Staged file
M : Modified file
git add test.txt
git status -s
test.txt 를 수정한 후
git status -s
'git' 카테고리의 다른 글
Pro Git - 브랜치 워크플로, 브랜치 관리, 브랜치 추적 (0) | 2021.02.22 |
---|---|
Git 필수 명령어 요약 (0) | 2021.02.16 |
[책] Pro Git 2판, review [5] - branch (0) | 2021.02.15 |
[책] Pro Git 2판, review [3] (0) | 2021.02.15 |
[책] Pro Git 2판, review [2] (0) | 2021.02.10 |