SVN은 중앙 서버에 소스코드와 히스토리를 저장하는 방식이지만, Git은 소스코드를 여러 개발 PC와 저장소에 분산해서 저장할 수 있다. 그렇기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며, 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다.
Git은 이러한 버전관리를 통해 협업하기, 되돌리기, 효율적으로 백업(Back up)하기 이렇게 3가지를 중점적으로 시행한다.
사본을 로컬에서 관리하기 때문에 GIT이 SVN에 비해 훨씬 빠르다. ( SVN은 변경 로그 하나 보는 것도 인터넷을 경유해야 한다. )
2. 버전(Version)이 만들어지는 단계
Working Directory (작업 공간)
내가 CODE를 수정하는 등의 작업을 하는 공간이다.
파일을 생성, 수정, 삭제하는 공간이다.
즉, 변경 사항이 생기는 공간이다.
Working Directory의 모든 변경사항을 버전으로 만들 필요는 없다. 여기서 선별한 파일들만 모아서 하나의 버전으로 만든다.
Working Directory에서 선별한 파일들만 Staging Area로 올려보낸다.
Staging Area
Working Directory에서 선별 된 파일들이며, 버전이 될 후보들이 올라와 대기하는 공간이다.
Staging Area에 있다고 해서 아직 하나의 버전이 되지는 않는다.
Local Repository
버전별로 관리하고 저장하는 공간이다.
Local Repository에 Commit을 하는 순간 비로소 하나의 버전이 된다.
3. 버전(Version)을 만들기 위한 기본 명령어
$ git init : 현재 Directory에서 Git으로 버전관리를 시작한다. 선언
$ git status : 현재 Directory의 상황 확인
[ Working Directory —> Staging Area ] : $ git add 파일명
[ Working Directory —> Staging Area ( 이 때 변경사항이 있는 모든 파일 대상 ) ] : $ git add .
[ Staging Area —> Working Directory ] : $ git rm –cached 파일명
[ Staging Area —> Local Repository ] : $ git commit -m “커밋메시지” 파일명
[ Staging Area —> Local Repository ( Area 내의 모든 파일 대상 ) ] : $ git commit -m “커밋메시지”
$ git commit 만 입력시에는 좀 더 자세히 커밋메시지를 남길 수 있는 화면으로 이동한다.
$ git commit -am “커밋메시지” 를 통해 Working Directory —> Local Repository로 한 번에 이동시킬 수 있다. 단, 이건 한 번이라도 Commit을 한 파일 대상으로만 가능하다.
$ git log : Commit Log를 확인할 수 있다.
—> Commit ~ 라는 문자열이 나오는데, 그게 버전을 식별할 수 있는 CODE가 된다.
—> log에서 빠져나오려면 “Q”를 누르면 된다.
—> $ git log –all –decorate –graph –oneline 명령어를 통해 예쁘게 log를 볼 수 있다.
하나의 깃 명령어에도 수많은 옵션들이 붙어있다. 그런 심화된 내용들을 보고 싶다면, Git Bash에서 $git 명령어 –help 를 치면 된다.
4. “A”라는 Directory에서 버전관리를 시작해보자
Git Bash 를 다운 받고 설치 한다. ( 기본 )
Git Bash에 내 계정을 연동한다. ( 기본 )
“A” Directory 에 들어가서, 우클릭 —> Git Bash를 실행한다.
$ git init 명령어를 통해 “A” 라는 폴더에서 버전관리를 시작할 것이라고 선언한다.
.git 이라는 숨김폴더가 생겼으면 성공한 것이다
.git 이라는 폴더가 생성된다.
$ git status 를 이용하여 현재 Directory의 상태를 알 수 있다.
Test.txt 파일을 하나 만든 이후, First 라고 입력 후에 저장을 한다.
$ git add Test.txt 를 통하여 해당 파일을 Staging Area에 올린다.
$ git commit -m “First Commit” 을 통해 Local Repository 로 Commit을 한다.
$ git log를 통해 Commit 내역을 확인해본다.
5. Github 란?
git commit 을 통해 버전을 만들면 내 Local 저장소에 있는 Repository에만 저장이 된다.
그러면 다른 사람들과 협업을 할 수 없다.
어떻게 다른 사람들과 원격으로 협업 할 수 있는가?
이럴 때 사용하는 것이 Github이다.
Github는 각자의 PC에만 존재하는 Local Directory의 버전을 인터넷에서 저장/관리해주는 서비스이다.
Github에 Push 를 하면 우리가 지금까지 만든 Local Directory 내의 모든 버전들의 내역들이 한 번에 저장이 된다. ( 이 것으로 버전 관리를 하고, 백업도 가능하다. )
구글 드라이브나, 클라우드와의 차이점이 이부분이다. 드라이브나 클라우드는 마지막 버전만이 저장되며, 이전 내역들은 알 수 없다.
6. Github에 Push 하는 방법
Github에 회원가입을 한다.
원격 Repository를 하나 만든다.
해당 Repository의 URL을 복사한다.
$ git remote add origin URL : url에 있는 원격저장소를 origin이라는 단축이름으로 추가한다.( origin 은 바꿔도 된다. 해당 URL에 대한 Key값이라 생각하면 된다. )
$ git push -u origin master : 내 Local Repository의 master 브랜치에 있는 모든 Commit 내역을 origin 이라는 단축이름의 원격 리파지토리로 push 한다.
7. 소규모 프로젝트 협업을 위해 다른 개발자에게 권한 부여
공유할 원격 Repository를 만든다.
원격 Repository에서 Settings 클릭
Collaborators 클릭
협업할 사람의 Github Email 추가
협업자의 승인
각자의 PC에서 서로 Commit & Push와 Pull을 하며 작업을 한다.
8. 대규모 프로젝트 협업을 위해 다른 개발자에게 권한 부여
대규모 협업을 할 때에는 Pull Request 방법을 이용하는 것이 좋다.
책임자(이하 A) 가 공유할 원격 Repository를 만든다.
팀원(이하 B) 은 해당 Repository에 들어가서 우측 상단의 Fork를 누른다.
B의 계정에 해당 Repository가 생성된다.
자신의 계정에 생긴 Repository에 가서 Clone or download를 누르면, URL이 나온다.
각자 자신이 작업할 Directory에서 Git Bash를 켜고, $ git clone URL 을 통해 원격 Repository의 내용을 Local Repository로 복사하여 불러온다.
$ git checkout -b newbranch를 통해 newbranch라는 새 브랜치를 만들고, 들어간다.
개발을 진행한다.
add 후 commit 한다. 이 때 협업 중이므로 커밋 메시지는 자세히 남겨준다.
$ git push origin newbranch를 통해 push를 해준다
우리가 Fork를 통해 가져온 원격 Repository에 가보면 Compare & Pull 이라는 버튼이 생겨있다. 이걸 클릭한다.
Create pull request 를 통해 pull request를 전송한다.
A가 코드를 확인하고 Merge pull request를 통해 승인을 해주면, B가 수정한 내용이 Merge가 된다.
B는 이 때 사용한 Branch를 지워준다. ( 권장 ) $ git branch -D newbranch