1. GIT이란 무엇인가?
깃(Git)은 2005년에 리누스 토르발스에 의해 개발된 '분산 버전관리 시스템(Distributed Version Control Systems - DVCS)'으로, 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 파일에 대한 작업을 조율하는데 사용된다 (참고 : https://git-scm.com/book/ko/v2 Git 공식 사이트 한글 메뉴얼).
즉, 주로 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때, 소스 코드를 관리하는데 주로 사용된다.
그렇다면,
2. 버전관리는 왜 필요한가?
쉬운 이해를 위해 'PPT로 발표자료를 만든다'는 하나의 가정을 들어보자.
처음에 '발표.ppt'라는 제목의 파일을 만들었다가, 내용이 바뀔 경우 '발표_최종.ppt' 파일으로 바꾸고, 수정에 수정을 거쳐 '발표_최종 ver2.ppt'파일을 만들었다. 마지막에 가독성을 높이기 위해 글자 크기를 키우고 '발표_진짜완전최종.ppt'파일을 만들었다고 치자.
위에서 설명한 방법 또한 각 버전의 파일을 복사, 저장, 백업하는 버전 관리의 하나의 방법이긴 하지만, 어느것이 가장 최근의 파일인지 알아보기 어렵고 효율적이지 못하다는 단점이 있다.
더불어, 개인 ppt가 아닌 팀 프로젝트로 개인이 본인이 맡은 파트의 ppt를 만들어 합치는 과정이라고 생각해보자.
팀원 B가 본인 담당 파트를 A가 만든 '발표_진짜완전최종.ppt'파일이 아닌, '발표_최종 ver2.ppt'파일에 업데이트를 한 경우, 팀원 A는 다시 글자 크기를 조절해야하는 번거로운 과정을 거쳐야 한다. 팀원이 둘이 아닌 셋 넷 혹은 수백명인 대형 프로젝트를 진행할 경우, 버전관리를 통해 각 파트별로 만든 파일을 본 버전에 합치는 과정은 매우 복잡해질 것이다.
개발 프로젝트에서 이런 버전관리를 돕는 시스템이 바로 깃(git)이다.
3. 깃(git)의 장점
- 인터넷 연결이 되지 않은 곳에서도 개발을 진행 할 수 있으며, 분산 버전관리이기 때문에 중앙 저장소가 삭제되어도 원상복구가 가능
- 각각의 개발자가 Branch에서 개발한 뒤, 본 프로그램에 합치는 merge방식을 통한 병렬 개발 가능
- 서브버전(Subversion SVN)과 비교 :
1) SVN = 중앙서버 업로드(직관적) / Git = 로컬저장소 저장 후 서버 업로드
2) SVN = 동시 업로드시 충돌 가능성 많음 / Git = Branch와 Merge를 통해 충돌 가능성 낮음
3) SVN = 모든 작업에 네트워크 사용되어 느림 / Git = 작업은 로컬에서, 업로드만 네트워크 사용해 빠름
4) / Git = 히스토리 관리 기능이 잘 제공되어, 히스토리 관리가 용이
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 : 작업하기 원하는 브랜치로 이동.\
**최근 버전의 Git에서는 git switch와 git restore를 사용하는 것이 권장되고 있다. 관련 내용은 여기 에서 다뤄보고자 한다.
cf1) git checkout Yana : Yana 브렌치로 이동.
cf2) git checkout -b 야나 : '야나' 라는 브랜지를 생성 후 야나 브렌치로 이동(생성과 이동 동시에)
- git merge : 개별 branch에서 마친 작업을 master branch로 병합.
6. 깃허브(Github)란 무엇인가?
- 깃(Git)을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스.
cf1) 깃 : 휴대폰 속 애니팡(오프라인에서도 플레이가 가능)
깃허브 : 애니팡 서버(온라인 서버를 통해 유저간 하트 주고받기, 기록경쟁 외 상호작용 가능)
cf2) 깃(Git)사용 시 서버를 자체적으로 구축하는것도 가능하지만, Github 서버를 이용하는편이 편하다.
- 오픈소스의 경우 무료로 서버 제공 => 오픈소스의 성지
- 2019년부터 Private 소스들도 무료 업로드 가능
'CS > Git' 카테고리의 다른 글
github 프로젝트 commit convention 통일기(feat.. githook + shell script) (0) | 2023.12.26 |
---|---|
[git] checkout, switch, restore 차이점 (0) | 2023.12.22 |
[Git] Clone부터 PR까지, project cycle (0) | 2021.12.11 |
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!