일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Ajax
- Git
- 17471
- Java
- 타겟넘버
- JavaScript
- 17822
- 알고리즘
- JSP
- boj
- SOCKET
- node.js
- 비동기
- web
- 파핑파핑지뢰찾기
- staged
- graph
- 1868
- commited
- npm
- 응답코드
- SWEA
- HTTP
- 달팽이는올라가고싶다
- 카카오코드페스티벌
- react
- 백준
- GitHub
- 2869
- 소형기관차
- Today
- Total
devlog
[Git] Git이란 무엇인가? 본문
1. Git이란 무엇인가?
Git이란 버전 관리 시스템(VCS, Version Control System)의 한 종류이다.
그렇다면 여기서 말하는 버전 관리란 무엇이고, 왜 필요할까?
버전 관리란 이름 그대로 여러 파일을 하나의 버전으로 묶어 관리하는 것이다. 버전 관리를 예를 들어 말해보자.
예를 들어, 우리가 제출해야 하는 레포트가 하나 있다. 처음에 'report.txt'를 만들었다가 내용이 바뀔 경우 'report_최종.txt'으로 바꿨다가 다시 수정을 거치면서 'report_진짜최종.txt' 이런식으로 만든 경험이 있을 것이다.
우리는 여러 파일들을 복사, 저장, 백업 등을 하였고 이것을 버전 관리라고 부른다.
2. 버전 관리 시스템
하지만, 위에서 설명하였던 버전 관리 방식은 어떤 것이 가장 최신 파일인지 알아보기도 어렵고 효율적이지 못하다.
그렇기 때문에 이를 전문적으로 관리하는 시스템이 만들어지게 된다. 이것을 버전 관리 시스템(Version Control System,VCS)이라고 부른다.
VCS는 크게 아래의 두가지로 나눠볼 수 있다.
1) 클라이언트-서버 모델
-
하나의 중앙 서버가 존재하며, 여러 클라이언트들은 중앙 서버에서 각자 맡은 파트만 가져와서 작업하고, 다시 중앙으로 통합하는 것을 말한다.
-
대표적 시스템으로 CVS, Subversion 등이 있다.
2) 분산 모델
-
하나의 중앙 서버가 존재하지만, 여러 클라이언트들은 각자의 컴퓨터 저장소에 중앙 서버의 전체 사본을 가지고 작업을 하는 것을 의미한다.
-
대표적 시스템으로 Git이 있다.
3. Git의 필요성
Git의 필요성을 말하기 위해 예를 하나 들어보자.
나와 나의 동료가 동시에 같은 웹사이트에서 페이지를 업데이트하고 있다고 하자.
나는 무언가를 변경하고 저장한 다음 웹사이트에 그것을 업로드한다. 그런데 이때 문제는 동료가 동시에 같은 페이지에서 작업할 때이다. 확인하지 않고 동시에 작업을 한다면 누군가의 작업은 겹쳐쓰여질 것이고 지워질 것이다.
깃과 같은 버전관리 시스템은 그런 일을 방지해준다.
나와 동료는 같은 페이지에 각자의 수정사항을 각각 업로드할 수 있고, 깃은 두 개의 복사본을 저장한다.
그런 후 우리는 어떤 작업도 잃어버리지 않고 변경사항들을 병합(Merge)할 수 있다. 깃은 이전에 만들어진 모든 변경사항의 “스냅샷”을 저장하기 때문에 이전 시점의 어떤 버전으로 되돌릴 수도 있다.
이렇기에 프로젝트를 진행할 때 Git은 아주 유용하며 필수적으로 많이 사용한다. 프로젝트에서 내가 작업한 부분을 올리고 다른 사람이 작업한 부분을 올려 스냅샷이 저장되고 어떠한 코드도 손실되지 않고 나눠서 작업한 파일을 병합할 수 있기때문이다.
4. Git 기본 용어
Git을 사용하기 위해 알아야 할 용어들이 있다.
Repository : 저장소를 의미하며, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인 할 수 있다.
Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점이다.
Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치이다.
Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업이다.
Head : 현재 작업중인 Branch를 가리키는 것이다.
Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다.
Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.
5. Git 주요 명령어
일단 Git은 명령어가 아주 많다. 그러나, 깃을 시작하기에 앞서 기본적인 명령어만 살펴보기로 하자.
git init : 깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이것을 입력한 후에야 추가적인 깃 명령어들을 줄 수 있다.
git help : 명령어를 잊어버렸다면 커맨드 라인에 "git help"를 쳐보자. 그럼 21개의 가장 많이 사용하는 깃 명령어들이 나타난다. 좀 더 자세하게 “git help init”이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수도 있다.
git status : 저장소 상태를 체크한다. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.
git clone : 원격 저장소의 저장소를 내 local에서 이용할 수 있게 그대로 복사해 가져온다.
git add : 이 명령이 저장소에 새 파일들을 추가하진 않는다. 대신, 깃이 파일들을 지켜보게 한다. 파일을 추가하면, 깃의 저장소 “스냅샷”에 포함된다.
git commit : 깃의 가장 중요한 명령어이다. 파일을 수정한 후, 저장소의 “스냅샷”을 찍기 위해 사용하는 명령어이다. 보통 “git commit -m “Message hear.” 형식으로 사용한다. -m은 명령어의 다음 부분을 메세지로 남긴다는 뜻이다.
git push : 로컬 컴퓨터에서 작업하고 당신의 커밋을 깃허브에서 온라인으로도 볼 수 있기를 원한다면, 이 명령어로 깃허브에 변경사항을 “push”한다.
git pull : 로컬 컴퓨터에서 작업할 때, 작업하고 있는 저장소의 최신 버전을 원하면, "git pull"을 통해 깃허브로부터 변경사항을 다운로드할 수 있다.
git log : 커밋 내역을 확인해보고 싶을 때 사용하는 명령어이다.
git branch : 여러 협업자와 작업하고 자신만의 변경을 원한다면 이 명령어로 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 만든다. 새 브랜치를 “hello”로 지정하고 싶다면 "git branch hello"라고 쓸 수 있다.
git checkout : 현재 위치하고 있지 않은 저장소를 “체크아웃”할 수 있다. 이것은 체크하길 원하는 저장소로 옮겨가게 해주는 탐색 명령이다. 만약 master 브랜치를 들여다 보고 싶으면, git checkout master를 사용할 수 있다.
git merge : 브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master 브랜치로 병합할 수 있다. "git merge hello"라고 입력한다면 hello브랜치에서 만든 모든 변경사항을 master로 추가한다.
'Git' 카테고리의 다른 글
[Git] git 대소문자 변경하기 (0) | 2019.09.15 |
---|---|
[Git] Git 3가지 상태 (0) | 2019.08.24 |