본문 바로가기

파이썬 기초

Git을 이용한 코드 버전 관리

Git을 이용하여 소스 코드 버전 관리 사용하기

git fast vsrsion control

Git이란 2005년 리누스 토르발스가 리눅스 커널의 개발을 위해 만들었으며 OSS(Open Source Software)로 개발 과정에서 사용되는 문서, 소스 코드 등 다양한 파일들의 변경 이력을 효과적으로 관리하기 위해서 개발된 분산형 관리 시스템입니다.

 

Git를 이용하여 버전 관리를 하면 소스 코드의 변경 이력을 쉽게 확인할 수 있으며, 특정 시점의 저장된 버전과 비교하거나 특정 시점으로 되돌아갈 수 있습니다. 만약 실수를 해서 프로젝트가 실행을 하지 않거나 치명적인 결함이 발생하였을 경우에도 이전에 정상적으로 동작하던 버전으로 롤백이 가능합니다.

또한 내가 올리려는 파일이 누군가 편집한 내용과 충돌한다면, 서버에 업로드할 때 경고 메시지를 보여줍니다.

 

Git의 특징

-. 로컬에 다수의 독립성이 보장되는 branch를 허용하고 쉽게 생성, 병합, 삭제가 가능하다.

-. 원격 저장소(Remote Repository)에 push 하지 않은 채 여러 branch 생성이 가능하다.

-. 로컬 우선 작업을 통해 성능이 SVN, CVS보다 우수하다.

-. 팀 개발을 위한 분산 환경 코딩에 최적화되어 있다.

-. 파일 암호화 및 체크섬(checksum)을 통해 데이터의 신뢰성이 보장된다.

-. Staging Area를 통해 서버의 Repository로 업로드하는 방식이다.

-. 원격 저장소 장애에도 문제없이 버전을 관리할 수 있다.

 

Git의 시작 단계에서 Git에서 사용하는 주요 용어 몇 가지(저장소, 작업 트리, 커밋, 인덱스)를 정리 후 Git의 사용 방법을 알아봅시다. 

 

저장소(Repository)

저장소(Repository)는 프로그래밍 작업을 하고 있는 파일이나 폴더를 저장하는 곳으로 저장소에서 발생하는 모든 변경 사항들이 Git를 통해 저장되고 관리됩니다.

저장소에는 전용 서버에 위치하며 여러 사람이 같이 공유하기 위한 원격 저장소(emote Repository)와 개인 PC에서 개인 전용으로 사용하는 로컬 저장소(Local Repository)가 있습니다.

 

로컬 저장소와 원격 저장소는 연경이 가능합니다. 로컬 저장소에 저장된 내용을 원격 저장소에 업로드하여 다른 사람과 공유가 가능하며 반대로 원격 저장소에 있는 공유된 내용을 내 PC의 로컬 저장소로 내려받을 수도 있습니다.

 

이러한 저장소를 만들어 사용하기 위해서는 로컬에서 새로 만들어 사용할 수도 있지만, 서버에 있는 원격 저장소를 내려받아서 사용하는 것도 가능합니다.

 

작업 트리(Work tree)

작업 트리(Work tree)는 우리가 프로그래밍을 위해 작업하고 있는 폴더를 의미합니다.

 

커밋(Commit)

커밋(Commit)은 저장소에 파일 및 폴더의 추가/변경/삭제 사항을 기록하는 것입니다. 커밋의 모든 사항은 로그(Log) 기록되며 숫자와 영어로 이루어진 40자리의 고유한 참조 ID가 부여됩니다.

 

인덱스(Index)

인덱스(Index)는 작업 트리(Work tree)에서 저장소(Repository)로 커밋(Commit) 하기 위한 별도 공간을 Git에서는 인덱스라고 합니다. 다시 말해, 저장소에 변경 내용을 저장하기 위해서는 인덱스라는 곳에 변경되는 파일/폴더가 모두 존재하여야 하는데 이것을 스테이징(Staging)이라고 표현합니다.

 

 

본격적으로 Git를 사용하기 위해서 Git를 먼저 설치해야 합니다.

 

Git 설치하기

Git 공식 웹사이트(https://git-scm.com/)를 방문하여 설치 파일을 다운로드 후 설치해봅시다.

 

우측 하단에 최신 Release 버전을 클릭하여 다운로드합니다.

(별도 설정 변경 없이 디폴트 상태로 설치 진행하면 됩니다.)

Git 다운로드

 

설치가 완료되었으면 시작 메뉴에서 Git > Git Bash를 찾아서 실행합니다.

 

제대로 설치되었는지 확인을 위해 다음과 같이 git --version을 입력하고 실행해 봅시다.

$ git --version
git version 2.28.0.windows.1

 

다음 단계는 사용자 이름과 메일 주소를 설정하여야 합니다.

이 단계는 지금 안 하여도 상관은 없지만, 나중에 처음 커밋을 하게 될 경우 Git에서 요청할 것입니다.

$ git config --global user.name "username"
$ git config --global user.email "username@google.com"

 

 

이제 설정이 완료되었으니 Git을 이용하여 봅시다.

 

새 저장소 만들기 및 초기화하기

먼저 로컬에 새 폴더를 하나 만듭니다.

여기서는 "First_Git"이라는 이름으로 폴더를 하나 만들었습니다.

 

저장소를 초기화하기 위해서 새롭게 만든 폴더, First_Git 폴더에서 마우스 오른쪽을 클릭하여 Git Bash Here를 선택하면 MINGW64 창이 나타납니다.

Git Bash Here

 

여기에 git init이라고 입력하고 엔터 키를 눌러 초기화를 실행합니다.

$ git init
Initialized empty Git repository in D:/First_Git/.git/

First_Git 폴더에 빈 저장소가 초기화되었습니다. Git이 저장소 관리에 사용하는 모든 파일이 '. git/' 폴더에 들어가 있으며 폴더 보기가 숨김으로 설정되어 있으니 사용자는 이 폴더를 신경 쓸 필요가 없습니다.

 

다음으로 First_Git 폴더 안에 다음과 같이 단순한 파이썬 프로그램 파일을 하나 만들어서 저장합니다.

(메모장으로 작성 후 저장해도 됩니다.)

[ sample_git.py 파일 ]

print("Hello Git World")

 

상태 체크하기

git status를 입력 후 실행해보면 다음과 같이 실행됩니다.

git status

On branch master는 현재 작업하고 있는 곳이 master branch에 있음을 알려주는 것입니다.

Untracked files: 아래에 sample_git.py라는 파일명 하나가 보이시나요?

이것은 해당 폴더(First_Git)에 존재하는 파일 중 아직까지 Git이 추적 중이지 않는 파일들의 목록을 의미합니다.

 

인덱스에 등록하기

저장소에 커밋을 하기 위해서는 사전 작업으로 인덱스에 등록하여야 합니다. Git에서 추적 중이지 않는 파일을 인덱스에 등록하기 위한 명령어는 add입니다.

add 뒤에 Dot(.)으로 Untracted files 전체를 한 번에 지정할 수 도 있고 파일명을 스페이스(띄어쓰기)로 구분하여 입력하는 것도 가능합니다.

$ git add .

 

그리고 다시 상태 체크(git status)를 수행하여 봅시다.

아직 커밋(Commit)이 된 것은 아니고 인덱스에 커밋을 위한 준비 작업이 완료된 상태입니다.

git add and status

 

커밋하기

이제 커밋을 해봅시다. 커밋을 위해서는 commit -m "commit message" 명령을 사용합니다.

"commit message"에는 사용자가 해당 커밋의 내용을 알기 쉽게 읨의오 작성하면 됩니다.

여기서는 "initial commit, First file"이라고 commit message를 입력하였습니다.

git commit

 1 file changed, 1 insertion(+)  하나의 파일이 정상적으로 추가된 것을 확인할 수 있습니다.

 

커밋 후 상태 체크를 해보면 다음과 같이 더 이상 커밋할 내용이 없고 작업 트리가 clean 되었음을 볼 수 있습니다.

commit and status

 

커밋 로그 확인하기

Git은 모든 커밋 로그를 보관하고 git log 명령을 이용하여 확인이 가능합니다.

git log

 

커밋 시마다 영어와 숫자로 조합된 40자로 구성된 고유한 참조 ID가 부여되는데 여기서는 "0ceb048408259c7f9 bdf331f593ffb9a14753d22"이 고유한 참조 ID입니다.

그리고 누가, 언제 커밋하였는지 알 수 있으며 commit 메시지도 확인할 수 있습니다.

log 명령어 뒤에 --pretty=oneline을 사용하면 log를 간단한 형태로 확인도 가능합니다.