충분히 쌓여가는
Git / GitHub 본문
Git
- 분산 버전 관리 시스템(Distributed version control system)으로 코드의 버전을 관리하는 도구
- 2005년 리눅스 커널을 위한 도구로 리누스 토르발스 개발
- 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업 조율
- 로컬에서 자신의 개발 소스에 대한 섬세한 관리 가능
- Remote Repository(원격 저장소)에 영구적인 백업 및 다양한 협업 가능
- 같은 파일에 대한 각기 다른 버전 보관 가능
버전관리 하는 이유
- 과제_제출.ppt
- 과제_제출_최종.ppt
- 과제_제출_최종1_최종2.ppt
- 과제_제출_최종1_최종2_최종최종.ppt
- 과제_제출_최종1_최종2_최종최종_찐최종.ppt
- 과제_제출_최종1_최종2_최종최종_찐최종_ㄹㅇㄹㅇㄹㅇㄹㅇ최종.ppt
여러 파일 버전을 일관되게 관리 못함 | A컴퓨터와 B컴퓨터의 파일이 같은 파일 버전이라고 보장할 수 없음 (누군가는 항상 예전 파일로 작업 중임) |
변경을 기록하고 내용 공유하기 어려움 | 어떠한 변경이 있었는지 누가 변경 했는지 추적하기 어려움 |
의도치 않은 덮어쓰기 | 여러 명이 같은 파일을 수정하다보면 내용 덮어써지게 되는 경우가 많음 (A란 사람이 1번 페이지 작성 중이였는데 작업 중인 부분에 B가 내용 덮어쓰는 경우) |
수정하기 전 내용 복구 어려움 | 변경 전 버전에 대한 정보 없음 (변경한 내용을 하나씩 되돌려야 함) |
Git 장점
오프라인 작업 가능 | - git은 저장소를 로컬에 복제하고, 로컬 저장소에 있는 히스토리도 그대로 유지됨 - 서버에서 새로운 자료를 받아올 수 없을뿐 이외에는 오프라인 상태에서 대부분의 형상관리 기능을 이용할 수 있음 -> 일종의 로컬 서버로 작용됨 |
속도 빠름 | 각각의 개발자들이 모두 분산처리 서버의 master가 됨 -> 서버가 직접해야 될 일들이 많이 줄어듬 |
일시적인 서버 장애가 있어도 개발 가능 | 로컬 저장소 이용하면 됨 |
Branch 비교적 쉬움 | |
Merge 문제 덜 발생함 |
서버의 자료를 가져와 로컬에서 병합하고 이를 다시 올리는 형태이기 때문 |
Staging 지원 | Commit(커밋)하기 전 사용해야하는 스테이징 단계를 지원함 |
Tool 많음 | - 수많은 개발자용 툴이 Git을 자체 지원 - Git용 플러글인이 있음 - 초보자를 위한 GUI부터 전문자용 Diff툴까지 Git사용에 도움이 되는 툴이 많음 |
Git 단점
기존 형상관리 도구에 비해 덜 직관적이고 배우기 힘듬 |
처음배우는 경우 어디까지가 서버에 영향을 미치는 행위이고 어디까지가 로컬에서 안전하게 할 수 있는 일인지 명확하게 이해하기 어려워 명령어 하나하나에 두려움을 느낄 수 있음 |
한 번에 여러 브랜치나 여러 태그에 걸쳐서 커밋을 할 수 없음 | - 내가 만든 사소한 변동사항이 다른 브랜치에 자동적으로 알려지지 않고 나중에 취합하는 시점이 돼서야 반영 - 타 브랜치와 병합시 충돌의 원인이 될 수 있음 |
커밋 히스토리가 영원히 안전하게 저장된다고 보장할 수 없음 | -중앙 집중형 형상관리에서 체크인을 하고 나면 서버에 문제가 생기지 않는 한 항상 안전하고 언제든 과거 기록을 볼 수 있으나 git에서는 Push를 한 내용이라도 해당 브랜치가 다른 브랜치에 병합되기 전에 삭제되어버리면 나중에 해당 내용에 접근할 수 없음 |
Git 저장소
- Github
- GitLab
- Bitbucket
- Azure DevOps
자체 호스팅
- 외부에서 제공되는 서비스 형태가 아닌, 설치형 Git 서버는 리눅스 서버라면 별다른 추가 프로그램 없이 리눅스의 기본 프로그램(SSH 등)과 배포본에 들어있는 패키지 만으로 서버 구동 가능
CLI/GUL 사용
- Git 사용 시 CLI/GUL 둘 다 사용 가능함
- GUI 프로그램의 대부분은 Git 기능 중 일부만 구현하기 때문에 단순
- CLI를 사용할 경우 GUI도 사용 가능하지만 반대는 성립하지 않음
- Visual Studio 사용 시 git 프로젝트를 사용하면 자동으로 내장된 자체 git GUI가 나타남
Git 사용법
- Git 간편 안내서
- 누구나 쉽게 이해할 수 있는 Git 입문
- 생활코딩 : Git, Git CLI, Git CLI-브랜치 & 충돌, Git CLI - 백업, Git CLI - 협업, Git CLI - Cherrypick & Rebase, GitHub Pull Request, VSCode로 다루는 Git
- progit : GitHub의 CIO인 schacon이 쓴 progit
- 브랜치 배우고 체험해 보기
브랜치(branch) 주의사항
- 현실 프로젝트 시 보통 브랜치를 분리하라고 하지만 나중에 병합(merge) 단계에서 더 큰 충돌이 발생하는 경우가 많아 함부로 브랜치 기능을 사용하는 것에 주의해야 함
- 매우 거대한 기능을 개발하거나 앞으로 합칠 생각이 없는, 즉 다른 가지로 뻗어나가는 버전을 따로 사용하고 싶을 때 브랜치 사용
기타
- Git은 파일이나 커밋 등 모든 오브젝트를 SHA-1로 해시한 식별자를 통해 관리
- 이에 개발자 리누스 토르발스는 한다며 동의하지 않음
- Git은 데이터를 해시하기만 하는 것이 아니라, 거기에 타입과 길이 필드를 측량함
Github
- 클라우드에 있는 깃 제공자
- 사용자 컴퓨터에서 깃 히스토리 가져와서 (클라우드에 있는) github 웹사이트에 push
- 에디터는 이를 가져올 수 있기 때문에 변화기록을 올릴 수 있음
- 개인 git 기록을 github 클라우드에 올릴 수 있음
- Commit: Git(로컬 저장소)에 파일을 추가하거나 변경 내용을 저장하는 작업
- Push: Github(또는 원격 저장소)에 파일을 추가하거나 변경 내용을 저장하는 작업
- Pull: Github(또는 원격 저장소)에서 파일을 다운로드하는 작업
Github 소개
- 대표적인 무료 Git 저장소
- 2008년 공개
- Git 호스팅 기능 덕분에 Github는 자유 소프트웨어와 오픈소스의 성지로 떠오름
- 샌프란시스코 본사
마스코트
- Octocat : 고양이와 문어를 합친 모습
- 새 모양의 트위터 로고가 마음에 든 깃허브 관리자가 그 디자이너에게 제작을 의뢰함
특징
- SSH와 https 프로토콜 지원
- 각각 다른 당시의 Remote git의 URL로 저장
- Public/private repositoty 지원 : 접근 권한이 필요한 private repository인 경우 기본적으로 깃허브 계정과 비밀번호를 입력해야 git pull/push가능, 한 번 설정하면 됨
- 공동 작업 가능 : 2명 이상의 협력자(Collaborators)를 등록하여 하나의 프로젝트를 가지고 깃허브를 통해 공동 작업 가능
- 각 소스코드 저장소마다 홈페이지를 한 개씩 만들 수 있음
- 각 repository마다 별도의 이슈 트래커를 무료로 지원
- 외부 라이브러리 취약점이 확인된 경우 사용자에게 해당 사실을 통보하고 자동으로 최신버전으로 교체하는 기능 제공
정리
- Git은 버전관리를 위한 소프트웨어, Github는 Git으로 저장되어 원격전송된 내역이 저장되는 공간
- 비유하자면 Git은 개인 카메라, Github는 유튜브라고 생각하면 편할거 같다
'IT > Computer Science' 카테고리의 다른 글
ORM (2) | 2023.01.17 |
---|---|
추상 클래스 / 인터페이스 (0) | 2023.01.16 |
Transaction 트랜잭션 (0) | 2023.01.12 |
TCP / UDP (1) | 2023.01.11 |
SOLID 5가지 설계 원칙 (2) | 2023.01.10 |