일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- backtracking
- boj15654
- boj15683
- boj10775
- TDD
- django
- boj_15685
- euclideanalgorithm
- Spring
- springboot
- BFS
- boj2239
- nestedjson
- DynamicProgramming
- react
- DP
- boj15954
- boj15998
- bruteforce
- boj_15684
- BOJ
- onTouch
- boj7579
- mysql
- testdb
- boj10942
- DFS
- onTouchListner
- boj2252
- 동적계획법
- Today
- Total
이마닷의 블로그
git 기본 개념 본문
커널(kernel)에서 디렉토리나 파일을 만들고, 삭제하고, 수정하고, 이동하는 쉘의 기본 명령어를 배웠다면, 이제는 git을 이용하기 위해 git 명령어를 배워야 한다. git 명령어는 항상 'git'으로 시작하며, "git 명령어 [옵션] [매개변수]"와 같은 형식으로 사용한다.
git의 가장 핵심적인 명령어는 "git commit"이다. 커밋(commit)이란 어떤 파일에 대하여 그 파일의 변경된 내용과 작업한 사용자, 그리고 시간에 대해 기록을 남겨두는 것이다. 즉, commit을 통해 프로젝트 내 파일의 내용이 변경되고, 그와 관련된 기록이 commit함과 동시에 git에 남게 되는 것이다. 이는 파일을 변경 사항이 반영된 버전 별로 관리하게 해주고, 이것이 바로 우리가 github을 VCS(Version Control System)이라고 부르는 이유다.
커밋을 위한 기본적인 순서와 명령어들을 알아보기 전에, git의 영역에 대해 먼저 알아볼 필요가 있다. git에는 위 그림과 같이 3가지 영역이 있다. Working directory는 말 그대로 내가 현재 작업을 하고 있는 영역, 즉 일반적으로 생각하는 디렉토리이고, .git repositary는 커밋된 사항들과 그 기록이 담겨있는 디렉토리이다. staging area, 즉 스테이지 영역은 워킹 디렉토리와 git 레포지토리의 중간 영역으로, 현재 작업하고 있는 디렉토리 내 변경 사항을 git에 갱신해 주기 이전에 임시적으로 거치는 영역이다.
위 그림을 설명하자면, 'git add'라는 명령어를 이용하여 디렉토리 내 변경사항을 스테이지 영역으로 옮기고(stage fixes), 'git commit'의 명령어를 사용하여 이 변경사항을 다시 git에 업로드하며 관련 기록을 남기게 된다(commit). 커밋이 완료되면 git에서 벗어나와 다시 원래의 디렉토리로 돌아오게 되는 것(checkout the project)이다.
git을 이용할 때 파일들은 위 그림과 같이 네 가지의 상태를 가진다. Untracked란 커밋되지 않은 상태, Unmodified는 커밋된 상태, Modified는 커밋 후 변경된 상태, Staged는 git에 커밋 되기 위해 스테이지 영역에 올라간 상태를 뜻한다. 즉, 해당 파일이 한번도 git에 등록된 적이 없는 상태라면 untracked, 이후 'git add'를 통해 파일이 스테이지 영역에 올라갔다면 staged, 해당 파일이 'git commit'을 통해 git에 커밋되었다면 unmodified, 커밋 이후에 다시 이 파일을 변경한다면 modified 상태가 되는 것이다. untracked와 unmodified의 차이는 git이 해당 파일의 존재 여부를 인지하고 있느냐의 차이라고 볼 수 있다. 따라서 해당 파일이 삭제된다면, 해당 파일은 git에서도 존재하지 않게 되므로, untracked 상태가 되는 것이다.
git의 영역과 git 시스템 하에서 파일들의 상태에 대해 알아보았으니, 이와 관련하여 몇가지 git 명령어를 알아보도록 하겠다.
1. git init
위에서 말한 git repositary는 local repository와 reomote repositary로 구분된다. github는 다른 사람들과 함께 git을 사용할 수 있는 remote repositary를 제공하는데, 우선 지금은 local repositary를 만들어 보도록 한다. 이를 위해서 git을 초기화 해주어야 하는데, 이 때 사용 할 수 있는 명령어가 "git init"이다.
이 명령어를 사용하면, 해당 working directory 내에 .git이라는 디렉토리가 생성된다.
2. git status
git status는 워킹 디렉토리(프로젝트 디렉토리) 내의 파일들에 대한 상태를 보여주는 명령어이다. test.txt 파일의 경우, git에 등록되지 않아, git에 의해 추적되지 않으므로 untracked 상태가 된다. 아래 상태의 nothing added to commit 이란 staged 되어있는 파일이 없음을 뜻하며, git add 명령어를 통해 해당 파일을 stage 하라는 도움말이 뜬다.
3. git add
"git add 파일명"의 형식으로 명령어를 사용해 특정 파일에 대해 stage 할 수 있다. 이제 해당 파일은 커밋할 수 있는 상태가 되었다.
4. git commit
"git commit" 명령어를 입력하면 stage 영역에 올라와 있는 모든 파일에 대해 커밋을 하게 된다. 이 때, 커밋 메세지도 같이 작성해주어야 하는데, "git commit -m "메세지내용""과 같은 형식으로 옵션을 넣어 명령어를 실행해주면, 커밋 메세지도 한번에 작성할 수 있다.
단, 이렇게 commit을 하기 이전에, 사용자의 이메일과 이름이 등록되지 않았다면, 아래와 같은 메세지가 뜨고 커밋이 일어나지 않는다.
이 경우, "git config user.email "이메일주소""와 "git config user.name "이름""의 명령어를 사용해 본인의 정보를 등록해 준 후, 커밋할 수 있다.
5. git log
"git log" 명령어를 사용하면, 본인이 커밋한 이력을 확인할 수 있다.