안녕하세요~ Administrator팀의 조랭이입니다.
'버전관리 시스템'을 아시나요? 하나의 프로젝트를 여러 개발자/운영자가 관리할 때 버전이 뒤죽박죽 되는 것을 막기 Devops 사이클에서 빼놓을 수 없는 영역입니다.
그래서~~ 오늘은 버전관리 시스템 중, 가장 많이 사용되는 git과 github에 대해서 알아보도록 하겠습니다.
1. GIT이란 무엇인가?
깃(Git)은 2005년에 리누스 토르발스에 의해 개발된 '분산 버전관리 시스템 (Distributed Version Control Systems - DVCS)'으로, 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 파일에 대한 작업을 조율하는데 사용됩니다. (참고 : https://git-scm.com/book/ko/v2 Git 공식 사이트 한글 메뉴얼).
즉, 주로 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때, 소스 코드를 관리하는데 주로 사용됩니다. 그렇다면,
2. 버전관리는 왜 필요할까요??
쉬운 이해를 위해 'PPT로 발표자료를 만든다'는 하나의 가정을 들어볼게요.
대학교를 다니신 분들은 PPT를 저장할 때, '발표.ppt', '발표_최종.ppt', '발표_최종 ver2.ppt', 파일을 만든 기억이 있지 않으신가요 ㅎㅎ 그러다 앗차! 하고 다시 수정하면 '발표_진짜완전최종.ppt'로 파일을 만든 적 없으신가요? 저만 그랬나요
위에서 설명한 방법 또한 각 버전의 파일을 복사, 저장, 백업하는 버전 관리의 하나의 방법이긴 하지만, 어느것이 가장 최근의 파일인지 알아보기 어렵고 효율적이지 못하다는 단점이 있죠.
게다가, 개인 ppt가 아닌 팀 프로젝트로 개인이 본인이 맡은 파트의 ppt를 만들어 합치는 과정이라고 생각해본다면 팀원들은 어떤 파일이 언제 만들어진 것인지 확인하기가 매우 어렵습니다. 대형 프로젝트가 된다면 두말할 것도 없겠죠.
개발 프로젝트에서 이런 버전관리를 돕는 시스템이 바로 깃(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 : 작업하기 원하는 브랜치로 이동.
cf1) git checkout Yana : Yana 브렌치로 이동.
cf2) git checkout -b 야나 : '야나' 라는 브랜지를 생성 후 야나 브렌치로 이동(생성과 이동 동시에) - git merge : 개별 branch에서 마친 작업을 master branch로 병합.
6. 깃허브(Github)란 무엇인가?
- 깃(Git)을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스.
cf1) 깃 : 휴대폰 속 애니팡(오프라인에서도 플레이가 가능) - 깃허브 : 애니팡 서버(온라인 서버를 통해 유저간 하트 주고받기, 기록경쟁 외 상호작용 가능)
cf2) 깃(Git)사용 시 서버를 자체적으로 구축하는것도 가능하지만, Github 서버를 이용하는편이 편하다. - 오픈소스의 경우 무료로 서버 제공 => 오픈소스의 성지
- 2019년부터 Private 소스들도 무료 업로드 가능
'INFRA > DevOps' 카테고리의 다른 글
DevOps 엔지니어 (0) | 2022.06.23 |
---|---|
[Docker] Docker container 생성 (0) | 2022.06.21 |
[K8S] containerd 란 (0) | 2022.06.16 |
[Docker] Docker Engine 설치 실습 (0) | 2022.06.14 |
Service - 2 (0) | 2022.06.13 |
댓글