github 이해하기-1

Github에서 Commit 이란?

우리가 사용하는 Github-Repository에서 어떤 변경 사항을 만들었을 때 이것을 추가하는 것을 add라고 한다면, 이렇게 add된 부분을 하나의 버전으로 만드는 것을 commit 이라고 합니다.

Github과 SVN의 차이

10년 전만 해도 개발 전반의 소스 버전 관리는 SVN(SubVersion)을 이용 했었을 것입니다. 하지만, Github이 나오고 요즘의 대부분 오프소스나 사내의 소스 버전 관리는 SVN을 잘 사용하지 않게 되었습니다. 이 두 버전 관리 시스템은 큰 차이가 있는데, 바로 바뀐 것만 저장(delta)하는 것이 아니라 전체를 저장(snapshot) 한다 는 것입니다.

Git에서는 위의 그림처럼 마지막에 추가 된 print(“it’s first commit”)을 포함한 전체를 commit 한다는 겁니다. 위의 그림 대로 라면 SVN이 훨씬 더 적은 용량을 저장하여 속도도 빠를 것이라고 생각 될 수 있습니다. 하지만, 이러한 commit이 쌓이고 오래 되었을 때 과거의 commit이 정보를 찾아서 보려면 바뀐 점을 모두 반영 하는 계산을 해야 합니다. 하지만 Git은 앞의 commit 정보와 바뀐 부분을 찾는 연산 한번만 하면 되고, 바뀌지 않은 파일은 이전 파일의 링크만 저장하기 때문에 용량도 적고 계산이 필요 없습니다. 이러한 특성으로 인해 Git의 다양한 명령어들이 굉장히 빠르게 수행 될 수 있습니다.

GitHub 파일의 상태

로컬 저장소의 디렉토리를 git init 으로 초기화하고, README.md, bespin.py 두 개의 파일을 만든 후 상태를 확인해 보면 다음과 같습니다.

Untracked

그리고 위의 untracked 상태의 파일을 add 하면 상태가 변경 됩니다.

Staged

또 add된 파일을 commit하면 다음 처럼 수정 할 것이 없는 상태가 됩니다.

Unmodified

자 이제 bespin.py 를 변경 해보겠습니다.

Modified

위의 그림 처럼 수정 후 staged 되지 않은 modified 파일이 되고 git add를 하게 되면 staged-modified 상태로 변경 됩니다. 여기서 다시 commit을 하면 unmodified 상태로 변경이 되겠죠.

이렇게 Git에서 관리하는 파일은 크게 4가지의 상태를 가지게 되고, 각각의 파일은 이 4가지 상태에서 버전 관리가 됩니다.

1 thought on “github 이해하기-1”

Leave a Comment