티스토리 뷰
1. Git 이란??
✨ '리누스 토르발스'라는 프로그래머가 개발한 분산형 버전 관리 시스템(VCS)이다. VCS란 문서나 설계도, 소스 코드 등의 변경점을 관리해 주는 소프트웨어를 뜻한다. Git은 소프트웨어를 개발하는 기업의 핵심 자산인 소스코드를 효과적으로 관리할 수 있게 해주는 무료, 공개 소프트웨어이다.

2. 분산형 버전관리의 필요성
✨ Git은 분산형 버전관리 시스템이라고 했는데, 그렇다면 버전 관리가 필요한 이유에 대해 알아보도록 하자.

- 분산 버전 관리 시스템은 '분산'이라는 단어에 집중한다. 개발자들이 독립적으로 작업한 다음에 변경 사항을 병합할 수 있기 때문이다.
- 저장소를 히스토리와 더불어 전부 복제하는 방식이다. 만약 서버에 문제가 생긴다면, 복제했던 것을 통해 다시 작업을 시작할 수 있다.
- 또한 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.
3. Git 사용 전 지식
✨ local, remote 및 origin, upstream의 이해
- local은 내 컴퓨터 안의 폴더를 의미한다. Local Repository로 불리며, 저장소(Repository)로 인식되는 폴더(Directory)는 .git 이라는 숨김 폴더를 가지고 있다. local 환경만으로는 네트워크 통신이 필요하지 않은 상태이다.
- remote는 원격 서버에 있는 저장소이다. Remote Repository로 불리며, 소스코드를 저장하고 공유할 수 있는 원격 저장소를 제공하는 대표적인 서비스로 Githhub가 있다. remote 내에서도 내가 저장하고 관리하는 원격 저장소(origin)과 여러명이 관리하는 저장소(upstream) 가 있다.
- remote(upstream)는 소스코드 원형이 기록된 서버 저장소, remote(origin)는 원형을 복제해 만든 내 서버 저장소, local은 remote(origin)을 토대로 내 PC에 저장해 놓은 저장소이다.
* 깃허브란❓
- 원격 저장소 호스팅 서비스 = Git으로 관리한 프로젝트들이 모인 웹사이트, 개발자들의 SNS, 프로젝트 관리 도구
- 클라우드처럼 동작하고, 다양한 오픈 소스 프로젝트를 진행
- 위에서 본 저장소를 깃허브에 올려 공유할 수 있다.
4. 관련 용어들
✨ Git에 대해 자세히 알아보기에 앞서, Git과 관련된 용어들을 먼저 정리해 보았다.
1) Repository : 저장소를 의미하며, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인할 수 있다.
2) Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.
3) Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을 때 Merge를 하여 작업을 한다.
4) Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다. 병합 과정 중 두 branch에서 하나의 동일한 파일에서 서로 다른게 수정한 경우 충돌이 발생하며, 병합이 일시정지 된다. 이때, 충돌 부분에 대해 직접 수정하거나 Merge Tool 등을 활용하여 충돌을 해결한 뒤 병합을 계속 진행한다.
5) Head : 현재 작업중인 Branch를 가리킨다.
6) Staging Area: 저장소에 커밋하기 전에 커밋을 준비하는 위치.
5. Git 기본 명령어
- git help: 도움말 기능, 가장 많이 사용하는 21개의 깃 명령어를 출력해 준다. 사용법이 궁금한 명령어에 대해 'git help [명령어]를 타이핑하면 해당 깃 명령어의 설정과 사용에 대한 도움말이 출력된다.

- git init: 깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. init을 입력한 후 추가적인 명령어 입력 가능.
- git status: 저장소의 상태를 체크한다. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등의 상태 정보를 출력한다.
- git branch: 새로운 브랜치를 생성한다. 여러 협업자와 작업할 때, 이 명령어로 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 생성, 완성 후 협업자의 branch 혹은 main과 merge 한다.
- git clone: 서버 저장소의 데이터를 로컬 컴퓨터로 복사한다. 작업 중이던 내역이 있으면 덮어쓰기 된다.
- git checkout: 작업하기 원하는 브랜치로 이동한다.
- git add: 'staging 영역'에 변경 내용을 추가한다. 다음 commit 명령 전까지 변경분을 staging 영역에 보관하여 변경 내역을 저장한다.
| 명령어 | 작용 |
| git add [업로드 하고 싶은 파일 혹은 디렉토리 경로] | 해당 파일 혹은 디렉토리 변경 내용 staging area에 등록 |
| git add . | 현재 디렉토리 모든 변경 내용을 staging area에 등록한다. |
| git add -A | 작업 디렉토리의 모든 변경 내용을 staging area에 등록한다. |
| git add -p | 터미널에서 staging area로 넘길 파일을 선택할 수 있다. |
- git commit: staging area에 있는 변경 내용 묶음 및 정의.
cf) git commit -m [커밋 메시지]: staging area에 있는 내용은 "커밋 메시지"를 반영한 수정본 파일의 묶음이다.
- git push: 소스 코드의 변경 사항을 원격 저장소에 반영한다.
- git pull: 서버 저장소로부터 최신 버전을 "pull" 한다. 서버 저장소의 데이터를 가져와 현재 브랜치와 merge 해 준다.
cf) 작업 도중 기존 작업 내용은 유지하면서, 최신 코드로 업데이트할 때 사용한다.
- git merge: 변경 사항 등이 모두 확정되고 난 후, 브랜치들을 병합한다. 작업 마무리 단계에서 시행한다.
6. Git의 장점
- 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 분산 버전 관리이기 때문에 중앙 저장소가 삭제되어도 원상복구가 가능하다.
- 각각의 개발자가 Branch에서 개발한 뒤, 본 프로그램에 합치는 merge 방식을 통한 병렬 개발이 가능하다.
- 서브버전(Subversion SVN)과의 비교
| Git | SVN |
| 여러 로컬저장소에 분산해 저장 후 서버 업로드 | 중앙서버에 소스코드 업로드 |
| Branch와 Merge를 통해 충돌 가능성 낮음 | 동시 업로드 시 충돌 가능성이 높음 |
| 작업은 로컬에서, 업로드만 네트워크를 사용해 빠름 | 모든 작업에 네트워크가 사용되어 느림 |