Nuke Olaf - Log Store

깃허브란 무엇인가? 본문

Git

깃허브란 무엇인가?

NukeOlaf 2020. 1. 6. 18:32

깃허브란 무엇일까? 깃의 허브? 여기서 말하는 허브란 (특정 장소,활동의) 중심지, 중추를 말한다고 한다.

사실 안드로이드를 공부하면서 깃 커밋 푸쉬나 클론을 해보기는 했는데, 깃이 어떤 느낌인지 아직 정확히 모르고 쓰는 상태였다. 시니어 카메라 프로젝트에 참여하게 되면서 콜라보레이터, 브랜치, 머지, 풀 리퀘스트와 같은 개념들이 필요하게 되면서 깃허브에 대해 다시 공부하고 글을 쓰게 되었다.

1. Git 의 사전적 의미부터 알아보자

Git 이란 무엇인가? => 깃은 VCS 이다

위키피디아 에서 말하는 Git : https://en.wikipedia.org/wiki/Git

Git is a distributed version-control system for traking changes in source code during software development. It is designed for coordinating work among programmers, but it can be used to track changes in any set of files. Its goals include speed, data integrity, and support for distributed, non-linear workflows.

Git 은 소프트웨어 개발 중 소스 코드의 변경 사항을 추적하기 위한 분산 버전 제어 시스템이다. 프로그래머 간의 협업을 위해 설계되었지만 어떠한 파일이던 상관없이 변경 사항을 추적하는데 사용할 수 있다. 깃은 속도, 데이터 무결성, 비선형 분산 워크 플로우 등의 지원을 포함한 목적을 지니고 있다.

 

여기서, "버전 관리" 란 무엇일까?

version : https://en.wikipedia.org/wiki/Version

버전이란, 컴퓨터 프로그램의 진화를 식별하는 숫자이다.

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 프로그래머가 아니더라도 그래픽 디자이너도 버전 관리 시스템 (VCS - Version Control System) 을 사용할 수 있다. VCS 로 이미지나 레이아웃의 버전(변경된 이력 또는 수정된 내용) 을 관리할 수 있다.

 

그렇다면, 버전 관리 시스템 (VCS) 은 왜 이용할까?

버전 관리 시스템을 이용하면

(1) 각 파일을 이전 상태로 되돌릴 수 있고,

(2) 프로젝트를 통째로 이전 상태로 되돌릴 수있다.

(3) 시간에 따른 수정내용을 비교해 볼 수 있고

(4) 누가 문제를 일으켰는지 추적할 수도 있다

(5) 누가 언제 만들어낸 이슈인지도 확인 가능하다

(6) 그래서 vcs 를 이용하면 파일을 잃어버리거나 잘못 고쳤을 때에도 쉽게 복구할 수 있다.

 

버전관리 방법에는 "Local Version Control", "Central Version Control", "Distributed version Control" 방식이 있다.

https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F

Local Version Control System

많이 쓰는 로컬 버전 관리 도구에는 RCS(Revision Control System)라고 부르는 것이 있다. 아직까지도 많은 회사가 사용한다고 한다. RCS 는 기본적으로 Patch Set (파일에서 변경되는 부분)을 관리한다. Patch Set은 특별한 형식의 파일로 저장된다. 그리고 일련의 Patch Set 을 적용해서 모든 파일을 특정시점으로 되돌릴 수 있게 한다.

 

Central Version Control System

다른 개발자와 함께 작업해야 하는 경우 생기는 문제를 해결하기 위해 CVCS 가 개발되었다. CVS, Subversion, Perforce 와 같은 시스템들이 파일을 관리하는 서버가 별도로 있고, 클라이언트가 중앙 서버에서 파일을 받아서 사용 (Checkout) 한다. 수년동안 이러한 시스템이 사랑받고 사용되었다고 한다.

CVCS 환경은 누가 무엇을 하고 있는지 알 수 있다. 그래서 관리자는 누가 무엇을 할 지 꼼꼼하게 관리할 수 있다는 장점이 있다. 모든 클라이언트의 로컬데이터를 관리하는 것이 아니라 VCS 하나를 관리하는 방식이기 때문이다. 그러나 CVCS 환경은 치명적인 단점이 하나 있다. 만약 서버가 한 시간동안 다운되면 그동안 아무도 다른 사람과 협업할 수 없고, 사람들이 하는 일을 백업할 방법이 있다. 그리고 중앙 데이터 베이스가 있는 하드 디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃게 된다. 로컬 VCS 시스템도 이와 비슷한 결점이 있었고, 이런 문제가 발생하면 모든 것을 잃게 된다. 이러한 단점을 보완하기 위해 나온것이 DVCS 이다.

 

Distributed version Control System

분산 버전 관리 시스템은 Git, Mecurial, Bazzar, Darcs 등이 있다. 이러한 DVCS 에서의 클라이언트는 파일의 마지막 스냅샷을 Checkout 하지 않는다. 그냥 저장소를 히스토리와 더불어 전부 복제하는 방식을 사용한다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다. 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다. Clone 은 모든 데이터를 가진 진정한 백업이라고 할 수 있다.

즉, DVC는 모든 파일의 변경 이력을 서버 뿐만 아니라 개발자의 로컬 레포지토리에도 저장한다는 말이다.

위키피디아에서 말하는 DVC

https://en.wikipedia.org/wiki/Distributed_version_control

https://www.perforce.com/blog/vcs/what-dvcs-anyway

 

2. 그래서 깃허브란 무엇이고 깃허브를 왜 사용할까?

깃허브는 Linus Torvlads 가 만든 DVCS 이다. 

내가 어떤 프로그램을 만들기 위해 코드를 작성하다보면, 코드의 변경이력을 저장해야 할 필요성이 생긴다. 내가 지금 쓴 코드와 1시간전에 쓴 코드의 차이점이 뭐지? 내가 이틀전에 있었던 코드의 오류를 디버깅 했는데, 오류가 났던 코드가 어떻게 생겨먹은거지? 와 같은 필요가 생길것이다.

이러한 변경 이력들을 쉽게 관리하게 나온것이 "버전 관리 시스템" 이다. 깃허브는 버전관리 시스템중에서도 DVCS 라는 버전관리 시스템이다. DVCS 는 DVCS 이전의 버전관리 시스템들의 단점을 보완하기 위해 나온 것이다. DVCS 이전의 LVCS 나 CVCS 와 같은 버전관리 시스템들은 모든 코드가 서버에만 저장된다는 단점이 있었다. 그렇게 되면 서버의 하드 디스크가 고장나거나 유실되면 모든 내용들이 사라져버린다는 단점이 있었다. 그래서 나오게 된 것이 DVCS 이다.

DVCS 중 하나인 깃허브를 이용하면, 개발자들은 서로의 코드를 공유하며 쉽게 협업할 수 있다.

 

3. 깃허브를 사용하는 방법 (안드로이드 중점으로)

https://gist.github.com/480/4681b67d2a906db8c6c1321cc678f05f

https://medium.com/@psychet_learn/git-%EC%82%AC%EC%9A%A9%EB%B2%95-1%EA%B0%95-git%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-340438d9a69f

https://mrw0119.tistory.com/120

https://webclub.tistory.com/317

https://github.com/github/gitignore/blob/master/Android.gitignore

Comments