Git - 기본기 마스터 : 깃의 Workflow 이해하기

깃에는 크게 3가지의 작업환경이 나누어져 있다.

첫번째는 우리가 프로젝트의 파일들을 수정하는, 즉 작업하고 있는 working directory가 있고

두번재로 어느 정도 작업하다가 Version history에 저장할 준비가 되어있는, 파일들을 옮겨 놓는 staging area

마지막으로 Version의 history를 가지고 있는 Git repository 또는 .git directory 로 나누어져있다.

 

1. Git Workflow의 이해

 

위와 같이 프로젝트 폴더에서 a,b,c 파일들을 작업하고 있다가 b와 c가 어느정도 작업이 되었다고 생각되면

 

b와 c를 staging area로 옮겨준다.

 

그런 다음 commit이라는 명령어를 통해서 staging area에서 .git directory(repository)에 저장한다.

이런식으로 a 파일도 히스토리에 올릴 수 있게된다.

 

이렇게 git directory에 저장된 version 들은 check out 이라는 명령어를 통해서 언제든지 원하는 버전으로 가져올수있다.

 

 

하지만 이런식으로 저장된 git history는 자신의 컴퓨터에만 보관되기 때문에 만약 자신의 컴퓨터에 문제가 생기면

이러한 git history를 전부 잃어버릴 수 도 있다.

 

따라서 자신의 PC에만 저장해두는 것이 아니라 Git hub와 같은 서버에 push라는 명령어를 통해서 

자신의 git directory를 서버에 업로드하는 것이다.

 

마찬가지로 서버에서 다시 로컬로 다운로드 받고 싶을 때는 pull 이라는 명령어를 통해서 받을 수 있다.

 

다음은 각각의 버전들에는 어떠한 정보들이 들어있는지 확인해보도록 한다.

 

 

2. Version에 들어있는 정보

각각의 commit에는 스냅샷된 정보들을 기반으로해서 고유한 hashcode들이 부여된다.

이 hashcode(id)를 이용해서 버전정보를 참조할 수 있다.

 

그리고 이 commit에는 id(hashcode)뿐만 아니라 

어떤 버전인지 버전에 관련된 message와 누가작성했는 author  날짜와 시간같은 date/time 정보들도 함께 

포함되어 진다. 

 

 

3. 깃의 파일 상태(file status) 이해하기

Git의 working directory는 엄밀히 말하면 크게 untrackedtracked 2가지로 나눌 수 있다.

tracked : 깃이 이미 알고 있는 즉 깃이 트랙킹하고 있는 파일

untracked : 새로만들어진 파일이거나 기존에 존재하던 프로젝트에서 깃을 초기화하게 되면 깃이 파일에 대한 정보가 전혀 없는데 이를 트랙킹되지 않는 파일 즉 untracked 라고 분류한다.

 

 

그리고 tracked 파일들 중에서도 현시점에서 수정 유무에 따라서 unmodified파일과 modified파일로 나눈다.

수정되지 않은 파일들은 이전 버전과 비교해서 수정된 것이 없기 때문에 

오직 수정작업이 이루어진 modified 파일만 staging area로 옴겨갈 수 있다.

 

4. 실습

  위와 같이 git 폴더에 hello world! 라는 문자가 저장된 a,b,c txt파일들을 생성한다.

그러면 master 브랜치의 색깔이 달라진 것을 확인할 수 있는데 이것은 working directory에 변경사항이 발생했다.

즉 아직 commit되지 않은 변경사항이 발생했다는 것을 알 수 있다.

 

이것을 git status 명령어를 통해서 확인하면

On branch master : 마스터 브렌치위에서 작업을 하고 있고

No comits yet : 아직 커밋은 없고

Untracked files: untracked 파일이 3가지가 있다.

 

  notting added to commit but untracked files present (use "git add" to track)

아직 커밋할 것은 없지만 untracked파일들이 있기 때문에 git add라는 명령어를 사용하여 트랙킹 할 수 있다라고 알려주고 있다.

 

현재 상황은 아래와 같다.

 

아래와 같이 git add a.txt 를 실행한뒤 status를 보면 commit할 준비가 되어있는 변경사항 새로운 파일 a.txt가

존재함을 확인 할 수 있다.

 

즉 아래와 같은 상태이다.

 

이후 git add *.txt 를 실행하여 나머지 모든 txt파일도 트랙킹 해준뒤

이를 Sourcetree에서 확인하면 다음과 같다.

 

그럼 이번에는 a.txt 파일에 modified 라는 문자를 추가하는 작업을해보자.

 

a.txt 라는 파일은 수정되어있다고 나와있다. 이를 sourcetree로 확인해본다면

이렇게 시각적으로 확인해볼 수 있다.

 

 

Staging area에 있는 a,b,c 파일들은 git add라는 명령어를 통해서 추가할 당시의 그 상태의 파일들이 있는걸 볼수 있고

 

그 이후에 modified라는 문자를 추가한 파일은 staging area에 포함되지 않기 때문에 동일한 파일이라고 하더라도

staging이 된 이후에 수정된 내용들은 스테이지에 올라가지 않는 파일이라고 나온다.

 

또 a.txt 파일은 git이 트랙킹하고 있는 파일이 수정작업이 이루어진 것이기 때문에 modified 파일이라고 분류하고 있는 것이다.

 

 

이 modified인 상태인 a.txt 파일은 역시 마찬가지로 다시 git add a.txt 를 실행하면 다음과 같이 commit할 준비가 된다.

 

이렇게 Staging Area에 올라온 파일들은 git rm --cached 명령어를 통해서 다시 working directory로 옮길 수 있다.

git rm --cached 명령어를 통해 unstaging된 모습