Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

Git / GitHub 본문

IT/Computer Science

Git / GitHub

빌드이너프 2023. 1. 13. 10:20


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 사용법


브랜치(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