-
Git과 Github이란? (얄팍한 코딩사전 유튜브참조)about front-end 2020. 3. 29. 19:20
1. git은 왜 필요한가?
1) 버전관리
-고객에게 의뢰를 받아 앱을 하나 개발한다고 생각해보자.
소프트웨어라는게 만들고 운영하는 과정에서 계속해서 뭘 더하고, 개정하고 수정하게 된다.
그런데 나중에 이런 기능을 다시 가져오게 될 수도 있고
누가 실수로 잘못된 코드를 섞으면 복원해야 할 떄도 있고
코드가 어디가 어떻게 바뀌었는지 과거 내역을 확인해야 할 때도 있고 하기때문에
바뀌기 전 내역들도 중간중간 저장을 해 놓아야 한다.
(나중에 언제 필요하게 될지 모름)
-그래서 중요한 시점마다 파일들을 통채로 압축해서 날짜나 설명 등을 파일명에 넣고 따로 저장해두는데
이것들이 계속 쌓이면 용량도 많아지고 번거로워진다.
2) 협업
-작은 프로젝트라면 한명이서 개발할 수도 있겠지만,
이걸 여러 개발자들이 '난 이거, 넌 저거, 쟨 저거' 하면서 맡아서
각자 컴퓨터에 전부 복사해서 작업하는 식이다.
소프트웨어 프로젝트라는게 보통 폴더가 통째로 있어야 테스트를 해보려고해도 구동이 되는데
이메일로 공유하는 것도 어렵고...
또 나중에 에러가 나거나 실수가 있을때 누가 언제 뭘 어떻게 건드렸는지 파악하기도 힘들고....
2. git이란것은 무엇을 할 수 있는가?
웹이든, 앱이든 게임이든 소프트웨어를 만들기 시작하면,
파일들이 다 담기는 프로젝트 폴더가 있다.
그 폴더에서 git을 시작하면 지금부터 이 폴더의 모든 수정 내역들이 저장되는 .git 이라는 공간이 생긴다.
작업 후 백업에 포함할 파일들과 함께 이 시점까지 이러이러한 작업을 수행했다고 기록한다음
commit이라는 명령어를 실행하면 이 폴더의 전체 내용들이 찰칵!하고 박제가 된다.
그 이후로도 프로젝트에 의미있는 변화가 있을 때마다 '찰칵' '찰칵' commit을 해서 박제를 해 둔다.
압출파일을 저장해둘 때 처럼 전체가 다 저장되는게 아니라 각 버전의 변경사항들만 기록되는 것.
-> 박제를 여러번 한다고 용량을 몇 배로 차지하거나 하지도 않음.
그러다가 어라? 수정사항이 번복되거나 해서 프로젝트를 과거 시점으로 되돌려야 하는 상황이 온다면?
그러면, 이제까지의 박제 내역들을 확인한 다음, 그 박제 되었던 과거의 상태로 복원을 한다.
수정된 내역들은 복원이 되고, 새로 만든 파일들은 삭제되고, 지웠던 파일들은 또 복구가 된다.
(( git은 24시간 365일 나의 컴퓨터의 감시카메라와 같다. 모든 파일의 변화를 기록한다.
이것이 깃의 장점이다.))
아주 끼똥참.
또 프로젝트를 진행하다 보면, '이 기능을 넣을까 말까, 디자인을 이렇게 바꿀까 말까'
결정하기 애매할때,
이럴때 이렇게 '가지 내기', '분기' 가 가능하다. (=branch를 딴다.) $git branch "(브랜치명)"
주가되는 코드는 이 메인 branch에서 작업하고
시도를 해 볼 부분은 이 다른 branch에서 작업하다가 "어? 이거 괜찮네? 적용해도 되겠다" 싶으면
메인 브렌치에 합쳐버리면 된다. $ git merge "(브랜치명)"
이런 버전, 저런 버전 매번 따로 복사해서 저장을 해 둘 필요가 없다.
중간중간 폴더 압축해서 따로 저장해두는 수고 안해도 됨ㅋ
협업의 경우,
회사 서버에 git이 설치되어있거나, github같은 서비스를 이용하면
git으로 박제한 내용들을 원격으로 전송해서 공용공간에 저장할 수가 있다.
먼저, 다른 구성원들이 작업해서 올린 내역들을 '다운'받고,
거기에 내가 작업한 작업들을 '전송'하는 식으로 협업하게 된다.
이 모든 과정들이 순서대로, 체계적으로 기록되고 관리되기 때문에
나중에 문제가 생기더라도, 이 코드를 누가 건드렸는지 확인할 수 있고
얼마든지 코드들을 과거로 되돌려서 문제를 해결할 수 있다.
이런 버전관리 시스템은 git말고도 여러가지가 있다.
(CVS, Mercurial, Helix Core, Subversion, Bazaar..) -각각 특징과 장단점이 잇음.
그 중 오늘날 가장 많이 사용되는 것, 대세는 git이다.
이 git을 실무에서 사용할 수 있을 만큼 자유자재로 다루기 위해서는 어느정도 연습이 필요하다.
그래서 프로그래밍을 공부하는 과정이라면,
이 git을 연습해 볼 수 있는 튜토리얼이나 사이트들이 많이 있으니
지금 당장 시작해서 익혀두기를 권장한다.
git 은 VCS (Version Control System)이다. 버전관리 시스템.
VCS에는 2가지 종류가 있는데,
1) Subversion(SVN) - SVN에서는 commit을 할때마다 계속적으로 서버와 연결하고 데이터 송수신을 해야함.
2) Git- Git은 본인 컴퓨터에 내부 저장소를 만들고, 거기에 저장을 해놓았다가 나중에 서버로 Push하는 방식
3. 그럼 Github이란 무엇일까?
git은 버전관리를 위한 [[소프트웨어]]고,
Github은 이 Git으로 저장돼서 원격전송된 내역들이 저장되는 공간을 제공하는 [[서비스]]이다.
-> Git은 영상을 찍는 앱이고, Github은 유튜브와 같다.
내 컴퓨터에 있는 git 내용들을 깃허브 (클라우드에 있는) 웹사이트에 푸쉬 하는 것!
git은 version control system이면 github은 remote version control website이다.
여러분이 Git으로 관리하는 모든 코드들과 프로젝트들을 얼마든지 이 Github에 무료로 전송해서 저장할 수 있다.
이런 곳이 Github뿐 아니라 Gitlab, Bitbucket 등 여러 곳이 있는데
가장 널리 이용되는건 github 임.
이 곳에 올린 코드들은 모든 사람들이 볼 수 있고 다운받을 수가 있다.
그래서 Github은 단순히 내 코드들을 원격으로 백업해 두는 곳을 넘어서
전세계의 모든 오픈소스 프로젝트들이 공개되고 수많은 자발적 참가자들에 의해 발전하는 곳으로 작용한다.
오픈소스 란, 말그대로 코드가 다 공개된 소프트웨어 프로젝트이다.
전 세계 사람들이 그 코드들을 다 볼 수 있기 때문에 잘못된 기능을 수정하거나, 더 좋은 기능을 구현하는 코드들을
지구 반대편의 뛰어난 프로그래머에게 제안받을 수도 있고,
혹은 내가 다른 누군가의 혹은 다른 회사의 프로젝트에 기여할 수도 있다는 것.
github= 오픈소스의 성지
**git을 활용해서 코딩을 하는 방법에는 크게 두가지가 있는데,
콘솔을 사용하는 방법과 GUI 프로그램(GIITHUB DESKTOP 또는 소스트리 등)을 사용하는 방법이 있다.
나는 github desktop 사용!
'about front-end' 카테고리의 다른 글
git 사용법 (상) 혼자작업편 (0) 2020.05.22 프론트엔드개발자 면접질문 2020. (html편) (0) 2020.04.06 프론트엔드 개발자라면 꼭 알아야할 '무료'사이트 (닥코) (0) 2020.04.02 Github Desktop (0) 2020.03.30 신입개발자 포트폴리오 관리방법 (드림코딩:엘리) (0) 2020.03.25