repository와 commit
Git을 사용하기 위해 기본적으로 알아야 할 개념들!
먼저 repository는 우리말로 저장소 라는 뜻이다. Git에서 레포지토리에는 프로젝트를 위해 만든 디렉토리의 초창기 모습부터 최근 모습까지 버전별로 담기게 된다.(변경사항들은 .git 디렉토리에 담김!)
다음으로 commit은 프로젝트 디렉토리의 모습을 하나의 버전으로 남기는 동작을 커밋한다 라고 표현한다.
즉 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위 & 결과물을 커밋, 이 커밋이 저장되는 곳이 레포지토리라고 볼 수 있다.
repository 만들기
간단한 수학 계산기 프로그램을 만들고, 이 프로젝트를 진행하면서 Git을 사용해 보겠다.
먼저 프로젝트 디렉토리로 MathTool 디렉토리를 만든다. 나는 바탕화면에 디렉토리 생성 후 해당 디렉토리에서 Git Bash Here 을 통해 진행했다.
Git으로 MathTool 디렉토리의 버전관리를 시작하려면 설정이 필요하다. git init 을 입력하면 아래와 같이 뜬다. Initialized empty Git repository in ~~ 문장은 비어있는 레포지토리를 생성했음을 의미한다. 이러한 저장소가 생겼기에 이제 Git으로 버전관리를 할 수 있게 된다!
MathTool 디렉토리를 살펴보면 .git 이라는 디렉토리, 즉 레포지토리가 생성됐음을 확인할 수 있다.
첫 Commit 해보기
우선 MathTool 디렉토리에 + - 함수를 제공하는 calculator.py 파일을 추가한다. (sublime을 이용해 아래와 같이 파이썬 코드를 입력 후, MathTool 디렉토리에 저장)
무료인지 유료인지 라이센스 정보를 포함하는 License 파일 역시 MathTool 디렉토리에 저장해 준다.
나는 무료로 설정!
Git Bash에서 방금 생성한 파일들이 잘 저장되었는지 확인!
지금의 상태를 MathTool 디렉토리의 첫 번째 버전으로 저장해보겠다. 이럴 때 바로 commit을 하면 된다.
but 처음 commit을 하기 전에는 Git에게 commit 한 사람을 알려줘야하는 과정이 필요하다. 혼자 작업하는거면 몰라도 협업을 할 때는 누가 commit을 했는지 기록해놔야 나중에 복잡해지지 않겠지??
아래와 같이 이름과 이메일을 기록해주면 된다.
이제 commit을 하면 방금 입력한 이름과 이메일 주소도 함께 저장된다. 그 전에! 커밋을 하려면 이름, 이메일 뿐만 아니라 커밋에 대한 정보도 필요하다. 즉 어떠한 변동사항이 생겨서 커밋을 했는지, 그러한 정보를 추가해줘야 한다.(커밋 메세지라고 부름)
엔터를 누르면 아래와 같이 오류 메세지 같은게 뜬다?! 깜놀쓰 지금은 오류 메세지 뜨는게 맞음^^
untracked는 git에 의해 아직 추적되지 않고 있음을 의미한다. 즉 아직 git으로 해준게 없어서 버전 관리의 대상이 아님을 나타낸다.
사실 commit을 하기 전에는 commit할 파일을 미리 지정해줘야 한다. 이러한 사전작업을 add라고 한다.
아래와 같이 calculator.py와 License 파일을 commit할 대상 파일로 지정한다.
그러면!! 아까와는 다르게 commit이 완료된 결과가 출력된다. root-commit은 첫 번째 커밋임을 의미하고, 그 옆에는 내가 작성했던 커밋 메세지(Create calculator.py and License)를 확인할 수 있다.
2 files changed, 즉 2개의 파일이 변경되었다고 나오며 옆의 6 insertions 는 총 6줄, 즉 내가 작성했던 calculator.py에서 5줄, License 파일에서 1줄 총 6줄이 추가되었음을 의미한다.
commit 과정 되돌아보기! ! ! ! !
- 처음으로 커밋을 하기 전 사용자의 이름과 이메일 주소를 설정
- 커밋 메시지 남기기 (옵션 -m 사용)
- 커밋할 파일을 git add로 지정해주기
드디어 첫번째 commit 완료!! 신기하당 ㅎㅎㅎ
Git의 3가지 작업 영역
git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작한다.
- working directory : 작업하는 프로젝트 디렉토리를 말한다. 즉 여기서는 MathTool을 의미
- staging area : git add를 한 파일들이 존재하는 영역. 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영된다.
- repository : working directory의 변경 이력들이 저장되어 있는 영역. 즉 커밋들이 저장되는 영역이라는 뜻.
staging area에 올렸는지 여부에 따라 최신 모습이 커밋에 반영되는지가 달라지게 된다. 따라서 원하는 것들만 선별적으로 커밋에 반영할 수 있다!!!
working directory는 working tree, staging area는 index라고 할 때도 있다.
Git add 더 자세히 알아보기
calculator.py 파일의 제일 윗줄에 '# 계산기', License 파일 제일 윗줄에 '# 라이센스'로 각각 주석을 달아주었다.
커밋을 하려면 대상 파일을 add로 지정해줘야 한다. calculator.py 파일만 지정해 보겠다.
두 파일 모두 수정했지만, calculator.py 파일만 add 해줬다. 만약 지금 상황에서 커밋을 한다면?
calculator.py 파일은 주석이 추가된 이후 모습이, License파일은 주석이 추가되기 이전 모습이 커밋에 반영될것이다.
git의 현재 상태를 보면..
윗부분의 changes to be committed에는 커밋에 반영될 변경사항을 나타낸다.
아래의 changes not staged for commit 에는 변경사항은 있었지만, 커밋에 반영되지 않는 변경사항을 나타낸다.
License 파일도 add해준 후 git의 현재 상태를 확인하면 License파일도 staging area에 잘 추가되었음을 알 수 있다.
즉 커밋을 하기 전에 git status 커맨드를 통해 staging area에 수정할 파일들이 다 들어있는지 확인하면 좋다.
다음으로 calculator.py 파일의 코드 관한 회의 내용을 담을 meeting-log 디렉토리를 만들고, day1 day2 파일을 생성해보겠다.
방금 추가한 meeting-log 디렉토리도 커밋에 반영한다. 디렉토리를 add 하면 디렉토리안의 파일들도 모두 staging area에 추가된다.
변경사항이 있는 모든 파일을 staging area에 추가할때는 'git add . ' 와 같이 입력해준다. 이는 현재 프로젝트 디렉토리 내에서 변경사항이 생긴 모든 파일들을 staging area에 추가하라는 의미이다.
아래와 같이 커밋까지 완료!
Git이 보는 파일의 4가지 상태
Git에서 파일들은 크게 다음 2가지 상태를 가진다.
- Untracked 상태 : 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않는 상태를 뜻합니다. 예를 들어, 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 이 상태이다.
- Tracked 상태 : 파일이 Git에 의해 그 변동사항이 추적되고 있는 상태
그리고 Tracked 상태는 다시 아래와 같은 3가지 상태로 나눌 수 있다.
- Staged 상태 : 파일의 내용이 수정되고나서, staging area에 올라와있는 상태
- Unmodified 상태 : 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태. 커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태가 된다.
- Modified 상태 : 최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태.
git add 취소하기
staging area에 파일을 추가하는 명령어는 git add, staging area에서 파일을 제거하는 명령어는 git reset 이다.
staging area에서 파일을 지우는 거지 repository에는 마지막에 커밋한 상태가 그대로 남아있음!
git reset은 staging area에서 파일을 제거하지만 변경된 새 모습은 그대로 working directory에 남아있다.
특정 git 커맨드의 사용법을 알고 싶다면?
git help 라는 커맨드를 이용하면 된다. (git help [알고 싶은 커맨드의 이름])
또는 man git-[알고 싶은 커맨드] 도 사용가능! (but man은 리눅스 쉘 커맨드로 윈도우에서는 안된다고 한다..^ㅜ)
'1. 프로그래밍 > 1-1. Git' 카테고리의 다른 글
5. 브랜치 사용하기 (2) - [ git reset / checkout / merge ] (0) | 2021.09.05 |
---|---|
5. 브랜치 사용하기 - [ branch / merge ] (0) | 2021.09.05 |
4. 커밋 다루기 - [ commit history / 커밋 메세지 / HEAD / git reset ] (0) | 2021.08.31 |
3. GitHub 시작하기 - [ Git hub / Remote Repository / 사용자 초대 / Readme.md ] (0) | 2021.08.24 |
1. Git 시작하기 - [설치] (0) | 2021.08.19 |