Git은 두 가지의 역할을 하는 프로그램입니다.
- 코드 버전 관리 프로그램
- 개발 협업 프로그램
각각에 대해 살펴보겠습니다!
코드 버전 관리
버전 관리란 파일의 변화를 시간에 따라 기록했다가 특정 시점의 버전을 꺼내 올 수 있게 하는 시스템입니다.
SNS 프로그램으로 예시를 보이겠습니다.
한 개발자는 간단하게 동작하는 SNS 프로그램을 만들었습니다.
최종 완성까지는 추가 기능이 더 필요한 상황입니다.
이 때 개발자는 한 번에 업데이트를 하기 보다는 버전마다 기능을 새로 추가하려고 합니다.
만약 개발자가 git에 버전 저장을 하면 git은 두 가지 기능을 제공합니다.
첫 번째로 지난 버전을 확인할 수 있는 기능입니다.
이 기능으로 개발자는 본인이 무엇을 업데이트 하였는지 확인할 수 있습니다.
두 번째로 버전 복귀 기능입니다.
만약 이전 버전으로 프로그램을 바꾸고 싶으면 이 기능을 이용하면 됩니다.
개발 협업 프로그램
git을 이용하면 여러 개발자들이 각각 나눠 작성한 코드를 합칠 수 있습니다.
SNS 프로그램(Original)이 git에 저장돼 있다고 가정해봅시다.
개발자 A는 로그인, 좋아요 기능을 코딩해서 Original에 추가할 수 있습니다.
개발자 B는 댓글 달기 기능을 코딩해서 Original에 추가할 수 있습니다.
개발자 C는 알림 기능을 코딩해서 Original에 추가할 수 있습니다.
다음은 Git을 사용하기 위한 기본 개념입니다.
레포지토리(Repository)
레포지토리는 ‘버전별 프로젝트 모습’, ‘버전별 변경 사항에 대한 설명’이 기록된 저장소입니다.
프로그램이 저장된 디렉토리를 Project Directory라고 하고
그 안에 저장된 ‘.git’이라는 디렉토리를 Repository라고 합니다.
레포지토리는 git init이라는 명령어를 통해 만들 수 있습니다.
calculator라는 프로그램의 ‘프로젝트 디렉토리’
커밋(Commit)
커밋은 ‘git에 버전별 프로젝트를 업로드하는 것’, ‘버전별 프로젝트 결과물’을 의미합니다.
즉 git에서는 ‘버전’을 ‘커밋’이라고 하고
‘버전을 만들어서 레포지토리에 저장하는 것’도 ‘커밋’이라고 합니다.
그렇다면 아까 레포지토리를 설명한 이미지는 다음과 같이 변경됩니다.
Git 프로그램 다루기
이제 본격적으로 커밋을 위한 Git 명령을 해보겠습니다.
Git 명령은 git이라는 프로그램을 통해 동작합니다.
따라서 아래 링크를 통해 git을 다운로드 받아 주세요!!
https://git-scm.com/download/win
이제 커밋할 프로그램을 하나 준비합니다.
저는 hello라는 파이썬 프로그램을 만들었습니다.
이후 새로운 디렉토리를 만들어서 프로그램을 이동하시고
마우스를 우클릭 하셔서 ‘git bash’를 클릭해주세요.
앞으로 우리가 하는 git명령은 ‘git bash’를 통해 진행될 것입니다!
커밋을 위한 명령어는 아래와 같습니다.
git init
: 비어있는 레포지토리(프로젝트 디렉토리의 각 버전이 담기는 저장소)를 생성합니다.
-> .git 이란 디렉토리가 생성됩니다.
git config
: 커밋을 하기 전 사용자의 정보를 알려줍니다.
git config user.name “cse” : 이름 설정하기
git config user.email “cse@shacoding.com” : 이메일 주소 설정하기
-> 커밋을 하면 이름과 이메일 주소가 함께 저장됩니다.
git add
: 커밋에 반영할 해당 파일(의 수정된 모습)을 설정합니다.
git add hello.py
-> hello.py파일을 커밋에 반영합니다.
git commit
: 커밋 메시지(버전에 대한 정보)를 남겨서 커밋합니다.
git commit –m “Create hello.py and Lincense”
-> “Create hello.py and Lincense”라는 정보와 함께 hello.py파일(커밋1)이 레포지토리에 저장됩니다.
Git의 세 가지 작업 영역
커밋을 이해하려면 세 가지 작업 영역에 대해서도 알아야 됩니다!
1. Working directory(working tree)
: git 작업을 하는 프로젝트 디렉토리 (프로젝트 파일 및 레포지토리 존재) / 필자의 ‘hproject’ 디렉토리
2. staging area(index)
: git add를 한 파일들이 존재하는 영역 / 커밋을 하게 되면 staging area에 있는 파일들만 커밋하는 개념
3. Repository
: 프로젝트 디렉토리의 각 버전이 담기는 저장소 /.git 디렉토리
staging area에 파일을 올려야 최신 버전이 커밋에 반영됩니다.
바로 이 점이 Git을 사용할 때 잘 알고 기억해야하는 부분입니다.
Git 명령어 1
git status
: 프로젝트 디렉토리의 현재 상태를 보여줍니다. 만약 커밋한 파일이 수정됐으면 다시 커밋하라는 메시지를 보냅니다.
아래 이미지는 커밋할 파일의 변동사항이 없어서 clean 메시지를 보낸 것입니다.
git add .
: 현재 프로젝트 디렉토리 내에서 변경사항이 생긴 모든 파일을 index에 추가합니다.
git reset (파일명)
: staging area에서 파일을 제거합니다.
Git이 보는 파일의 네 가지 상태
Git의 상태(status)를 이해하려면 세 가지 작업 영역에 대해 이해해야 됩니다!
1. Untracted
: git에 의해 추적되지 않는 상태로 git add를 해주지 않은 상태
2. Tracted
: git에 의해 변동 사항이 추적되는 상태
2-1. Tracted – staged
: 파일이 수정되고 나서 staged(git add)된 상태
2-2. Tracted – Unmodified
: 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 수정된 것이 없는 상태
2-3. Tracted – Modified (unstaged)
: 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 수정된 것이 있는 상태
hello.py파일로 예시를 보이겠습니다!
아래 이미지처럼 파일을 수정하고 git status를 확인해보았습니다.
그러면 modified메시지가 빨간 색으로 출력되며 수정된 것이 있다고 알립니다!
이 상태에서 git add를 하고 다시 상태를 봐보겠습니다!
이번에는 modified메시지가 초록 색으로 출력 되었습니다. 이 상태가 바로 Tracted – staged입니다.
만일 이 상태에서 git commit을 하면 Tracted – unmodified 상태가 됩니다.
다음 포스팅은 깃허브에 대해 살펴보겠습니다.
감사합니다!
Git에 관한 게시물은 CodeIt의 강의 내용을 정리한 글입니다. 강의 이미지나 내용 자체를 업로드하지는 않습니다!!