Git에 대하여
Git 사용법을 알아야 한다. git은 필수다. 라는 말을 수도없이 들어왔고
나도 한번 써본 이후로 편리해 계속 쓰게되었다.
사용한지 얼마 되진않은 뉴비이기에 잘못된점은 말씀해주시면 감사하겠습니다.
Git 탄생배경 리누스 토발즈가 리눅스 커널을 개발에 이용하려고 개발했다고 한다.
그래서 Git 이 뭐죠?
Git 은 소스 코드 관리를 위한 분산버전관리 시스템 이다.
Git 의 작업폴더는 소스코드 수정기록과 그 기록을 볼 수 있는 로컬저장소(Local Repository) 이다.
분산버전관리 시스템이란?
분산된 버전관리이다.
이는 각 개발자가 서버에 접속하지 않고도 각자 개발을 할 수 있는 것이다.
버전이란? 소스코드 하나 또는 여러 묶을 하나의 버전이라고 한다
왜 쓰지?
버전1
을 출시 후버전2
를 출시했다. 근데버전2
에 문제가생겼다.버전1
로 돌아가야하는데버전1
이 기억이 안난다.- 위의 문제는 버전을 저장하지않아서 생긴 문제이다. 그래서 각 버전을 저장하기로해서 이제는
버전1
로 돌아갈수 있다. - 다시 위의 문제는 버전을 저장해놓은 서버가 문제가생겨 소스코드들이 날라갔다. 그래서 분산버전관리를 도입했다.
다시보는 분산버전관리란? 각 개발자가 서버에 접속하지않고도 각자 개발을 할 수 있는 것
3번의 문제로 분산버전관리 라는 개념이 생겨났는데
분산버전관리는 서버에 있는 버전을 통째로 자신의 컴퓨터에 복제하는 것이다.
그렇기 때문에 서버에 문제가생겨도 로컬저장소에 의해 서버의 소스코드를 다시복구시킬 수 있다.
출처 : https://git-scm.com/
그러면 Git 이랑 Github 가 있던데 차이는 뭐죠?
많은 사람들이 궁금해하는 Git 과 Github 가 있는데 차이점을 설명해본다.
위의 설명을 기준으로 github 이라는 원격저장소(Remote Repository) 에 버전을 올리는 것이다.
Git
Git 은 버전관리 프로그램이다. 위에서 설명했듯이 로컬 저장소에 버전들을 저장해 개발을 한다.
Github
Github는 Git으로 작업한 각 버전들을 서버에 올릴 수 있게 제공하는 서비스 이다. (Git 호스팅 사이트)
Github 를 통해서 다른사람의 소스코드를 내려받을 수 있기도하고 반대로 자신이 올릴 수 있기도 하다.
자신이 올려놓은 소스코드를 다른사람이 내려받을 수 있다는것은 협업도 가능하다는 뜻이다.
Git 동작과 용어
git 이 동작하는 과정과 git에서 쓰이는 대표적인 용어들을 몇개 알아보도록하자!
로컬저장소와 원격저장소
git 과 github 에서는 저장소(Repository) 라는 용어를 많이 쓴다.
로컬저장소(Local Repository) 는 개인의 작업 폴더이다. 네트워크 없이 작업 폴더 내에서 작업을 할 수 있다.
원격저장소(Remote Repository) 는 로컬저장소에서 작업한 프로젝트를 서버에 올릴 수 있는 저장공간이라고 생각하면된다.
스냅샷
git 은 각 버전을 스냅샷으로 저장을 하는데, 이 뜻은 다시 말하면 어떤 시점의 어떤 버전으로 되돌릴 수 있다는것이다.
또한, 네트워크가 필요없다.
파일 라이프사이클
작업폴더 내에 있는 모든 파일들(숨김파일포함)은 크게 두가지로 분류되는데
tracked
는 이미 스냅샷에 기록되어있던 파일.
untracked
는 작업폴더내에 있는 파일중에서도 스냅샷과 staging area 에도 포함되어있지 않은 상태이다.
tracked
파일들은 또 세가지 상태가 있는데
Unmodified
는 수정이 안된 상태
modified
는 수정된 상태
Staged
는 커밋이 저장소에 기록할 상태
add
$git add <파일이름>
위의 명령어를 통해서 해당파일을 staged 상태로 만든다.
commit
$git commit -m "커밋 메세지"
staged 상태인 파일들을 변경내용 확정을 짓는다. 다시말해서 로컬저장소(내컴퓨터) 에 저장한다는 뜻이다.
-m 을 적지않으면 vim(내장 편집기) 로 실행된다.
push
$git push <원격저장소이름> <브랜치이름>
push 는 마지막으로 커밋한 사항들을 git repository 에 올린다는 뜻이다. 만약 push를 하지않는다면 원격 서버에 변경사항이 저장되지않는다.
branch
branch(가지) 란 어떤 작업을 독립적으로 어떤 작업을 진행하기 위한 개념이다.
저장소를 처음 만들게되면 master
라는 이름의 브랜치를 만든다.
협업시에 개발자들은 동일한 소스코드를 공유하게되는데 브랜치를 새로 따서 작업을 하게되면 기존의 소스코드에는 영향을 미칠 수 없다.
독립적인 작업이 끝나면 다시 본래의 소스와 합칠수도있다.
1. 브랜치 생성
$git branch <브랜치이름>
2. 브랜치 삭제
$git branch -D <브랜치이름>
3. 체크아웃
$git checkout <브랜치이름>
4. 브랜치 생성 + 생성한 브랜치로 checkout
$git checkout -b <생성할브랜치이름>
3번의 checkout
은 개발자의 작업트리를 저장소의 특정 시점과 일치하도록 하는 시점이다.
다시 말하면, 특정 기능을구현하려고 branch
를 생성한 후에 해당 branch
로 이동하는 작업이 checkout
인 셈이다.
clone
원격 저장소의 파일들을 내려받는 과정
$git clone <원격저장소 주소>
github 의 workflow
출처 : Outsider's DevStory
마치며
git의 세계는 넓다. 하나의 생태계라고 보면될것같다. git 은 쓰면 쓸수록 편리함을 알아가게되고 편리함때문에 현재 IT업계에서 필수인것같다. 개인적으로 git 도 대학교 교육과정에 추가가되었으면 하는 바이다.