#1.GIT이란 무엇인가?
깃(git)은 2005년에 리누스 토르발스에 의해 개발된 "분산 버전관리 시스템(Distributed Version Control Systm-DVCS)"으로, 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 파일에 대한 작업을 조율하는데 사용된다.
(참고:https://git-scm.com/book/ko/v2 Git공식 사이트 한글 메뉴얼)
즉,주로 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여 할 때, 소스코드를 관리하는데 주로 사용된다.
#2.버전관리는 왜 필요한가?
쉬운 이해를 위해 'PPT로 발표자료를 만든다'는 하나의 가정을 들어보자.
처음에 '발표.ppt'라는 제목의 파일을 만들었다가, 내용이 바뀔경우 '발표 최종.ppt'파일로 바꾸고, 수정에 수정을 거쳐'발표 최종최종.ppt'를 만들었다. 마지막에 가독성을 높이기 위해 글자크기를 키우고, '발표 진짜완전최종최종.ppt'파일을 만들었다고 가정하자.
위에서 설명한 방법 또한 각 버전의 파일을 복사, 저장, 백업하는 버전관리의 하나의 방법이긴 하지만, 어느 것이 가장 최근의 파일인지 알아보기 어렵고 효율적이지 못하다는 단점이 있다.
그리고, 개인ppt가 아닌 팀 프로젝트로 개인이 본인이 맡은 파트의 ppt를 만들어 합치는 과정이라고 생각 해 보자.
팀원B가 본인 담당 파트를 A가 만든 '발표 진짜완전최종최종.ppt'이 아닌, '발표 최종.ppt'파일에 업데이트를 한 경우, 팀원A는 다시 글자 크기를 조절해야하는 번거로운 과정을 거쳐야 한다. 팀원이 둘이 아닌 셋 넷 혹은 수백명인 대형 프로젝트를 진행 할 경우, 버전관리를 통해 각 파트별로 만든 파일을 본 버전에 합치는 과정은 매우 복잡 해 질 것이다.
개발 프로젝트에서 이런 버전관리를 돕는 시스템이 바로 깃(Git)이다.
#3.깃(Git)의 장점
-인터넷 연결이 되지 않은 곳에서도 개발을 진행 할 수 있으며, 분산 버전 관리이기 때문에 중앙저장소가 삭제되어도 원상복구가 가능.
-각각의 개발자가 Branch에서 개발 한 뒤, 본 프로그램에 합치는 merge방식을 통한 병렬개발가능.
-서브버전(Subversion SVN)과 비교:
SVN | Git |
① 중앙 서버 업로드, 직관적 | 로컬저장소 저장 후 서버업로드 |
②동시 업로드시 충돌 가능성 많음 |
Branch와 Merge를 통해 충돌 가능성 낮음 |
③모든 작업에 네트워크 사용되어 느림 |
작업은 로컬에서, 업로드만 네트워크 사용해 빠름 |
④ |
히스토리 관리기능이 잘 제공되어 히스토리 관리가 용이 |
#4.Git의 기본 용어
-Repository(저장소)
:저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장, 작업자가 변경한 모든 히스토리를 확인 가능.
-Working Tree
:저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.
-Staging Area
:저장소에 커밋하기 전에 커밋을 준비하는 위치
-Commit
:현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.
-Head
:현재 작업중인 Branch를 가리킨다.
-Branch
:가지 또는 분기점. 작업을 할 때에 현재 상태를 복사하여, Branch에서 작업을 한 후에 완전하다 싶을 때 Merge를 하여 작업을 한다.
-Merge
:다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.
#5.Git의 기본 명령어
-git help
도움말 기능(가장 많이 사용하는 21개의 깃 명령어 출력). 사용법이 궁금한 명령어에 대해 "git help[궁금한 명령어]"를 타이핑시, 해당 깃 명령어의 설정과 사용에 대한 도움말 출력.
-git init
깃 저장소를 초기화. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이명령어를 입력한 후에야 추가적인 깃 명령어 입력 가능.
-git status
저장소 상태 체크. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등의 상태 정보 출력.
-git branch
새로운 브랜치 생성. 여러 협업자와 작업 할 시, 이 명령어로 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 생성, 완성 후 협업자의 branch혹은 main과 merge.
-git add
'staging 영역'에 변경내용 추가. 다음 commit명령 전까지 변경분을 staging영역에 보관하여 변동내역을 저장.
명령어 | 작용 |
git add [업로드 하고 싶은 파일 혹은 디렉토리 경로] |
해당 파일 혹은 디렉토리 변경 내용 staging area 등록 |
git add . | 현재 디렉토리 모든 변경내용 staging area 등록(상위X) |
git add -A | 작업 디렉토리 모든 변경 내용 staging area등록 |
git add -p | 터미널에서 staging area 로 넘길 파일 선택 가능 |
-git commit
staging area 에 있는 변경 내용 묶음 및 정의. 깃의 가장 중요한 명령어.
cf)git commit -m [커밋 메세지]: staging area에 있는 내용은 "커밋 메세지"를 반영한 수정본 파일의 묶음임.
-git log
커밋 내역 확인
-git push
로컬 컴퓨터에서 서버로 변경사항을 "push"
-git pull
서버 저장소로부터 최신 버전을 "pull" (서버 저장소의 데이터를 가져와, 현재 브랜치와 merge)
cf)작업 도중 기존 작업 내용은 유지하면서, 최신 코드로 업데이트 할 때 사용.
-git clone
서버 저장소의 데이터를 로컬 컴퓨터로 복사. (서버 저장소의 데이터를 그대로 가져옴. 작업중이던 내역이 있을시 덮어쓰기 됨.)
cf)프로젝트에 처음 투입 될 때 사용.
-git checkout
작업하기 원하는 브랜치로 이동.
cf1)git checkout Yana: Yana브랜치로 이동.
cf2)git checkout -b 야나: '야나'라는 브랜지를 생성 후 야나 브렌치로 이동(생성과 이동 동시에)
-git merge
개별 branch에서 마친 작업을 master branch로 병합.
#6.깃 허브(Git hub)란 무엇인가?
깃(Git)을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스
cf1)
깃: 휴대폰 속 애니팡(오프라인에서도 플레이가 가능)
깃허브:애니팡 서버(온라인 서버를 통해 유저간 하트 주고받기, 기록경쟁 외 상호작용 가능)
cf2)
깃(Git)사용 시 서버를 자체적으로 구축하는 것도 가능하지만, 깃허브(Github)서버를 이용하는 편이 편하다.
오픈소스의 경우 무료로 서버제공-오픈소스의 성지.
2019년부터 private소스들도 무료 업로드 가능.