본문 바로가기

깃이란? 깃 허브란? What is Git? Git hub?

프로그래밍을 하면 GitHub를 '꼭' 사용하자!

구글링을 통해 필요한 코드를 검색하다 보면 심심치 않게 GitHub에서 코드를 볼 수 있다.

GitHub는 어떤 것인지 알아보자. 자 그렇다면 먼저 Git에 대해 알아봐야 한다.


What is 'Git'?  '깃'이란?

- 깃 허브는 '깃 git'을 쉽고 편리하고 잘 제공하는 곳이다. 그렇다면 '깃 git'이란?


오픈소스계의 영원한 아이돌 리누스 토발즈는 리눅스 커널을 관리하는 기존 툴이 엉망인 것에 너무 빡친 바람에 git이라는 소스관리 툴을 만든다. 리누스는 하도 빡친 나머지, 단 2주만에 완성하는 기염을 토했다. (그러고는 후에 “git 만드는게 제일 쉬웠어요”라는 인터뷰로 나와 같은 빠돌이를 지리게 했다).

오픈소스의 승리 중에서.


출처) 나무위키 '깃 git' 도입부분 https://namu.wiki/w/Git






 

깃 허브의 심장에서 작동되는 소프트웨어인 '깃'(Git : 재수없고 멍청한 놈, 자식)을 만든 유명한 소프트웨어 개발자 리누스 토발즈에 감사한다. 


깃은 프로젝트의 어떤 부분도 겹쳐쓰지 않게 프로젝트의 변경을 관리하는 버전관리 소프트웨어이다.



왜 깃을 사용하나?


당신과 동료가 동시에 같은 웹사이트에서 페이지를 업데이트하고 있다고 하자. 당신이 무언가를 변경하고 저장한 다음 웹사이트에 그것을 업로드한다. 지금까지는 좋았다. 문제는 동료가 동시에 같은 페이지에서 작업할 때이다. 누군가의 작업은 겹쳐쓰여질 것이고 지워질 것이다.


깃과 같은 버전관리 앱은 그런 일을 방지한다. 당신과 동료는 같은 페이지에 각자의 수정사항을 각각 업로드 할 수 있고, 깃은 두 개의 복사본을 저장한다. 나중에, 당신들은 그대로 어던 작업도 잃어버리지 않고 변경사항들을 병합할 수 있다.

깃은 이전에 만들어진 모든 변경사항의 '스냅샷'을 저장하기 때문에 이전 시점의 어떤 버전으로 되돌릴 수도 있다.


깃을 사용할 때 어려운 점은 90년대 해커와 같이 코드를 타이핑하는 명령어 (ex. command line, terminal)를 사용하여 접근하는 것이다. 이것은 요즘 gui가 익숙한 유저에겐 까다로운 일일 수 있다.




깃 허브는 두 가지 방식으로 깃을 더 편리하게 해준다.


1) 깃허브 소프트웨어를 다운로드하면, 로컬에서 당신의 프로젝트를 관리할 수 있게하는 비주얼인터페이스를 제공한다. 

2) Github.com에 계정을 생성하면, 평가측정 등의 소셜 네트워크 기능을 사용할 수 있다.


다른 깃허브 사용자의 프로젝트를 둘러볼 수 있고, 그것들을 변경하거나 배우기 위해 자신만의 복사본을 다운로드 할 수 있다. 물론 다른 사용자도 당신의 공개 프로젝트에 대해 같은 작업을 할 수 있으며 에러를 발견해서 해결책을 제안할 수 도 있다.


어느 경우든, 깃이 모든 변경사항에 대한 '스냅샷'을 저장하기 때문에 어떤 데이터도 잃어버리지 않는다.


깃을 배우지 않고 깃허브를 사용할 수는 있지만, 사용하는 것과 이해하는 것은 큰 자이점이 있다. 깃을 이해하기 전에도 깃허브를 사용할 수 있으며, 나도 진짜로 이해하는 것은 아니다. (.. 위 본문은 가져오는 글이지만.. 작성 중인 나도 이해중이다 ㅎ )


https://nolboo.kim/blog/2013/10/06/github-for-beginner/



정리)


깃'git'은

프로젝트를 관리하는 '분산 프로젝트 버전관리 소프트웨어' (Distributed Version Control (Systems) (DVCS))이다.



버전관리 소프트웨어란?


개발 중 변경 내역을 추적할 있도록 개발된 소프트웨어를 말한다. 

즉, 버전별로 저장되어 변경된 사항을 알 수 있게 한다. 이전 버전과 차이를 알 수 있고, 이전 버전을 볼 수 있다.



작은 규모의 프로젝트면 모르겠지만 많은 개발자가 함께 개발해 나가는 프로젝트에서 많은 파일, 많은 소스코드가 변경되고 추가된다면 이 '버전관리 프로그램'은 굉장한 힘을 발휘한다.



깃 허브 'Git hub'는 

- 명령어로 접근하는 git을 이용하기 편리한 비주얼 인터페이스를 제공한다.

- Github.com에 계정을 생성하면 웹에서 프로젝트 버전관리를 할 수 있다.

- 소셜 네트워크 서비스를 제공. 다른 유저의 프로젝트를 참고 할 수 있으며, 나의 프로젝트를 다른 유저에게 보여 줄 수 있으며 소통을 통해 코드의 에러에 대해 해결책을 받을 수 있다.






Git의 장점


- 소스코드를 주고 받을 필요 없이, 같은 파일을 여려 명이 동시에 작업하는병렬 개발이 가능.


- 즉 브랜치를 통해 개발한 뒤, 본 프로그램에합치는 방식(Merge)으로 개발을 진행할 수있다.


- 분산 버전관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 중앙 저장소가 날라가버려도 다시 원상복구 할 수 있다.


- 팀 프로젝트가 아닌 개인 프로젝트일지라도 Git을 통해 버전관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는과정도 간단해 짐. (pull을 통한 업데이트, patch 파일 배포)



- 충돌 해결 능력

- Git을 통해 여러 사람들이 동시에 같은 파일을 작업할 수 있다. Git은 대개 자동으로 변경사항을 병합 할 수 있다. 그렇지 못 할 경우에 충돌이 무엇인지 알려주고 이를 해결하기 쉽게 해준다.


- 변경 취소 가능

  : 구 버전으로 쉽게 돌아갈 수 있음.

-> 개발에 대한 활기를 줄 수 있음. 잘 못되면 돌아가면 됨.


- 변경에 대한 HISTORY

-> 어떻게 변했는 지 알 수 있음.

-> 변경이유를 달고, 후에 볼 수 있음 (commit massage를 통해)


- 여러 갈래 (branch)로 실험해 볼 수 있음. 

- 변경 내용을 테스트해보거나 branch를 생성해 한 기능을 독립적으로 실험 해 볼 수 있음.

- 변경, 실험이 잘 되었을 경우 Master Branch로 병합할 수 있다. 물론 잘 안되면 돌아가면 된다.

- 여러 사람들이 다른 branch에서 작업이 가능하다. 기능을 독립적으로 개발, 병합할 수 있다.




공식 사이트에 나온 Git의 특징



 - Distributed development


전체 개발 이력을 각 개발자에게 제공, 변경된 이력을 다시 하나의 저장소로 복사.

추가된 점을 가져와, 로컬 개발과 동일하게 병합(merge)할 수 있다.

저장소는 Git protocol 및 HTTP로 쉽고 효율적(특별한 웹서버 구성없이)으로 접근할 수 있다.



 -  Strong support for non-linear development


비선형(여러 갈래) 개발 이력을 시각화하고 탐색 할 수 있는 강력한 도구를 제공.

신속하고 편리한 branch 및 merge 지원



 - Efficient handling of large projects


대형 프로젝트나 이력이 많은 작업에 매우 합리적

Git은 다른 버전 관리 시스템보다 빠르게 요청한다. 

또한, 최근 정상급 오픈소스 버전관리 시스템보다 장기간의 수정내역을 매우 효율적인 압축방법을 사용한다.



 - Cryptographic authentication of history


Git의 이력은 성공한 개발 이력의 commit에 의해 개정명으로 저장 됨.

일단 그것이 배포되면, 그것을 모르고 예전버전으로 변경하는것은 불가능하다. 또한, 그것들을 암호화 할수 있다.



 - 3.5 Toolkit design

UNIX의 전통에 따라, GIT은 C로 작성된 많은 소규모 도구모음이다.

그리고 많은 스크립트들이 기능 보강을 제공한다. Git은 새로운 기발한 작업을 위한 손쉬운 사용과 쉬운 스크립팅을 위한 도구를 제공한다.



출처: http://goddaehee.tistory.com/91 [갓대희의 작은공간]




'GitHub' 장점


'Git'은 '명령어'를 사용하여 접근한다는 점에서 사용하기 불편하다.

'GitHub'는 '비주얼 인터페이스'를 제공하면서 사용하기 편리하게 되었다.

 또한 웹에서도 프로젝트 버전을 관리할 수 있으며, 커뮤니티 기능도 사용할 수있다.


다른 사용자의 프로젝트를 볼 수 있으며, 그것을 '포크'를 통해 가져와서 변경하거나 복사본을 다운로드할 수 있다.

다른 사용자도 내가 만든 프로젝트를 볼 수 있다. 이런 커뮤니티를 통해 서로 더 나은 해결책을 찾을 수도 있다.


어느 경우든, 깃이 모든 변경사항에 대한 '스냅샷'을 저장하기 때문에 어떤 데이터도 잃어버리지 않는다.


- 기록요구 : 'Issue'를 사용해 버그를 기록 /  원하는 기능에 대해 논의 할 수 있다.

- 독립된 히스토리에 대한 협력 : 'branch'와 'pull request'를 이용해 다른 branch 또는 기능에 협력할 수 있다.

- 최근/진행 중인 작업 검토 : 'pull request' 를 통해  최근 변경된 내용, 논의 그리고 진행 중인 상황을 알 수 있다.

- 팀의 작업 진척 상황을 확인 할 수 있다.  pulse를 훑어 보거나 commit history를 통해팀의 진행 상황을 알 수 있다.