SlideShare a Scribd company logo
git
Learn DVCS
For beginner
Distributed Version Control System
텍스트 파일이 하나 있다
memo.txt
하고싶은 것?
memo.txt
수정한 내용을 기록해두고 싶다
어떻게 할까?
수정할 때 마다 다른 파일로 저장
memo.txt memo1.txt memo2.txt
시간이 지나면
흠…….
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
파일이 하나가 아니라면?
흠…….
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt
lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
수정하는 사람이 여러명이면?
OTL
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt
lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt
lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt
lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt
lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
폴더로 정리하면 되지 않을까?
이런 생각 하시는 분이 없기를 바랍니다
Memo Todo
어떻게 할까?
이런일을 전문으로 하는!
소프트웨어가 있다? 없다?
Yes! 있다!
어떤 소프트웨어가 있나?
많다
오늘은 git 을 배워봅시다
왜?
표지를 참고해주세요
설치
http://rogerdudler.github.io/git-guide/index.ko.html
git - 간편 안내서
첫 번째 문제로 돌아가봅시다
memo.txt
텍스트 파일이 하나 있고,!
수정한 내용을 기록해두고 싶다
“컵라면 1박스 구입” 이라는 수정이 발생
memo.txt
“수정”의 단계를 어느 정도까지 기록해야할까?
저장할 때 마다? !
컵(Save)라(Save)면(Save)… 이런식으로!
저장했다해도 모두 기록해야할까?
규칙 1!
“수정”의 단계는 “의미”를 기준으로
의미를 어떻게 알지?!
SW가 의미를 인식할 수!
없으니 정할 수 있는 사람 즉,!
사용자가 정하는 것으로 하자
규칙 1!
“수정”의 단계는 “의미”를 기준으로
이 파일의 수정이 끝났다 !
“이 파일의 의미있는 수준의 수정 작업이 끝났음” !
이라고 git 에게 알려주는 일
commit
memo.txt
맥주 구매 할 일 추가
쓰레기 봉투 구매 할 일 추가
컵라면 구매 할 일 추가
2014년 7월 10일 17:00
2014년 7월 9일 10:03
2014년 7월 6일 12:42
memo.txt
memo.txt
commit 1
commit 2
commit 3
@홍길동
@홍길동
@홍길동
세 번의 커밋
맥주 구매 할 일 추가
쓰레기 봉투 구매 할 일 추가
컵라면 구매 할 일 추가
2014년 7월 10일 17:00
2014년 7월 9일 10:03
2014년 7월 6일 12:42
commit 1
commit 2
commit 3
@홍길동
@홍길동
@홍길동
수정한 내용을 간략하게 표현하기!
위한 “커밋 메세지” 기록
수정 내용!
설명
memo.txt
맥주 구매 할 일 추가
쓰레기 봉투, 컵라면 구매 할 일 추가
2014년 7월 10일 17:00
2014년 7월 6일 12:42
memo.txt
commit 1
commit 2
@홍길동
@홍길동
두번만 할 수 도 있겠죠?
커밋의 기준을 정하는건 사용자.!
커밋의 단위를 작게 할 수록 변경 내용의 기록!
수준은 정밀해지며 파악할 수 있는 정보도 많아진다
규칙 2!
하나의 커밋(Commit)은 여러개의!
파일이 포함될 수 있다
“수정의 의미”를 확장하자!
하나의 파일을 수정하는 것,!
하나의 수정 작업이 여러 파일에 영향을!
줄 수 있는 것. 의미라는 관점에선 하나의!
수정이라고 할 수 있다
화요일.txt
월,화 자율 학습 일정 추가
수요일 학습 내용 추가
수,목,금 교육 시간 수정
2014년 7월 10일 17:00
2014년 7월 9일 10:03
2014년 7월 6일 12:42
commit 1
commit 2
commit 3
@홍길동
@홍길동
@홍길동
커밋은 수정의 단위. 수정은 여러 파일
에 걸친 변경 내역의 묶음일 수 있다.
월요일.txt
수요일.txt
수요일.txt 목요일.txt 금요일.txt
규칙 3!
파일을 수정하지 않고!
새로운 실험을 해 볼 순 없을까?
월,화,수,목,금 시간표 파일이 있는데
이 파일들을 변경하지 않고 새로운 월,
화,수,목,금 일정을 만들어 보고 싶다
가능할까?
규칙 3!
상태를 저장하는 공간을 만들 수 있다
상태란 모든것이다. 파일, 파일의
내용, 커밋 정보 등 git 이 관리하는
모든 것을 의미한다
branch
git 의 시작!
지정한 폴더의 변경 내용을 추적하기위한 준비
선택된 폴더의 변경 내용을 추적하기 위해 git
저장소를 만든다. 저장소가 만들어지면 git은
지정한 폴더를 포함하여 하위 폴더의 모든 변
경 내용을 커밋 단위로 추적한다.
init
git 의 시작!
지정한 폴더의 변경 내용을 추적하기위한 준비
init 명령으로 저장소가 만들어질 때
git은 master라는 이름의 브랜치를
기본으로 생성하고 이 후 커밋 내용
을 브랜치 기준으로 저장한다
master
화요일.txt
월,화 자율 학습 일정 추가
수요일 학습 내용 추가
수,목,금 교육 시간 수정
2014년 7월 10일 17:00
2014년 7월 9일 10:03
2014년 7월 6일 12:42
commit 1
commit 2
commit 3
@홍길동
@홍길동
@홍길동
월요일.txt
수요일.txt
수요일.txt 목요일.txt 금요일.txt
master
커밋은 브랜치 공간에 기록된다
master
새로운 브랜치 만들기
파일을 수정하지 않고 새로운 실험 하기
화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt
lab1
화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt
branch lab1
새로 만든 브랜치 lab1 은 master와 완전히 동일한 상태를 가진 공간.
lab1 브랜치에서 수정을 한 후 커밋하면 그 변경사항은 lab1에만 기록
되며 master 브랜치에는 어떤 영향도 주지 않음
lab1
화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt
commit 1
화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt
완전히 독립된 브랜치 lab1
lab1
원하는 만큼 브랜치 생성 가능
lab2
git 은 매우 빠르게 새로운 독립
공간인 브랜치를 원하는 만큼
만들 수 있다. 브랜치 이름은 이
름 정의 규칙 내에서 사용자가
원하는 형태로 작명할 수 있다
master
lab1
checkout master
HEAD
HEAD
실험 중 다른 브랜치로 돌아가야한다면?
원한다면 언제든 다른 브랜치
(작업 공간)로 이동할 수 있다.
브랜치는 마지막 커밋 상태를
유지한다.
작업 중인 위치를 가르키는 가
상의 커서가 존재하는데 이를
git 에서는 HEAD 라 한다.
master
lab1
checkout master
HEAD
HEAD
브랜치를 이동하는 이유가 뭘까?
새로운 실험을 하기 위해 lab1을 만들
고 열심히 작업하고 있다. 그런데
master 브랜치에 내용을 변경할 일이
발생했다. 어떻게 해야할까?
시나리오
master 브랜치로 이동하여 변경 작업
을 처리한 후 커밋. 다시 lab1 브랜치로
돌아와 하던 실험을 계속 한다.
정답
실험 종료. 선택의 순간
master
lab1
lab1에서 진행했던 실험이
예상과 달리 필요없는 작업이
되었다. 어떻게 하면 될까?
실험 실패
master로 이동 후 lab1 브랜치를
삭제한다. lab1의 모든 기록이 제거
된다. 기록 보관 차원에서 삭제하지
않아도 아무 문제 없다
정답
실험 종료. 선택의 순간
master
lab1
lab1에서 진행했던 실험이 성공
적으로 끝났다. 실험의 결과를
master 브랜치에 옮기려한다.
어떻게 하면 될까?
실험 성공
lab1 브랜치의 내용을
마스터 브랜치와 병합
(merge) 한다.
정답
merge lab1
브랜치와 브랜치의 병합(Merge)
master
lab1
HEAD
commit 3
commit 1
commit 2
commit 4
master 브랜치에 lab1 브랜
치를 병합하면 git 은 lab1 브
랜치의 내용과 master 브랜
치의 commit 3 의 내용을 포
함하여 두 브랜치를 병합한다
병합 결과
변경 내용에 따라 파일 내용이
변경되고 때론 파일이 삭제될 수
도 있으며 추가될 수 도 있다.
정리
commit!
branch!
checkout!
merge
수정 내역을 사용자 기준의 의미로
기록한다
완전히 독립된 작업 공간을 만들 수 있다
독립된 작업 공간인 브랜치를 자유
롭게 이동할 수 있다.
브랜치와 브랜치간 내용을 병합할 수 있다
아직 해결되지 않은 문제
어떻게 다른 사람과!
함께 작업할 수 있을까?
master
lab1
우리는 git 저장소를 하나 가지고 있다.!
내 컴퓨터에 있기 때문에 나만 접근할 수 있다.
동료와 함께 작업 하려면?
master
lab1
동료와 함께 작업하려면?
복사를 시도해 볼 수 있겠다
master
lab1
동료와 함께 작업하려면?
복사를 시도해 볼 수 있겠다
복사는 단방향이다. 한번 주고
동료가 작업한 결과를 돌려 받
기 위해선 너무나 많은 어려움
이 예상된다
git은 “리모트

저장소”를 지원한다
master
lab1
리모트 저장소가 있다면?
remote.com/projectA
master
lab1
master
lab1
project A project A
project A
리모트 저장소 또한 원본 git 저장소와 동일한 저장소이다!
리모트 저장소를 경유하여 함께 작업할 동료도 완전히 동일한!
저장소를 다운로드 받을 수 있으며, 동일한 방식으로 작업 할 수 있다
리모트 저장소에서 저장소 다운로드
remote.com/projectA
master
lab1
master
lab1
project A
project A
리모트 저장소에서 처음으로 git 저장소를 다운로드 받는 것을 !
복사본을 만든다는 의미로 clone 이라 한다.
clone remote.com/projectA
clone remote.com/projectA
리모트 저장소의 변경 내용 업데이트
remote.com/projectA
master
lab1
master
lab1
project A
project A
리모트 저장소의 변경된 내용을 로컬(내 컴퓨터) 저장소에 적용하는!
작업을 Pull 이라 한다. 이때 브랜치 병합과 같은 병합이 발생한다.
pull origin
pull origin
내 저장소(로컬 저장소)의 변경 내용 리모트로 전송하기
remote.com/projectA
master
lab1
master
lab1
project A
project A
로컬(내 컴퓨터) 저장소에서 작업한 내용을 리모트 저장소로!
보내는 작업을 Push라 한다. 함께 작업하는 동료에서 변경사항을 !
전송하기 위해선 리모트 저장소를 경유해야 한다는 것을 알 수 있다.
push origin
push origin
리모트 저장소를 쉽게 만들고!
공유할 수 있는 대표적인 서비스가 있다
git 사용법을 학습할 수 있는 다양한 콘텐츠
http://git-scm.com/book/ko
http://pcottle.github.io/learnGitBranching/
Learn Git Branching
Git 메뉴얼 (한글)
https://try.github.io/levels/1/challenges/1
Code School - Try git
https://www.atlassian.com/git/tutorial
Atlassian git tutorial
Kim min tae @ibare!
NCSOFT http://ibare.kr https://medium.com/@ibare

More Related Content

What's hot (20)

PDF
Git - Level 2
민태 김
 
PDF
Git 입문자를 위한 가이드
chandler0201
 
PDF
Git 더하기 GitHub(구름IDE 환경)
Junyoung Lee
 
PDF
[NDC16] Effective Git
Chanwoong Kim
 
PDF
Advanced Git Tutorial
Sage Sharp
 
PDF
15分でわかるGit入門
to_ueda
 
PPTX
Git One Day Training Notes
glen_a_smith
 
PPTX
Git basics to advance with diagrams
Dilum Navanjana
 
PDF
Git이란 (Git 소개 및 기초 이론)
승용 윤
 
PDF
Learning git
Sid Anand
 
PDF
git and github
Darren Oakley
 
PPTX
이클립스로 GIT 사용하기
우영 주
 
PDF
A Git Workflow Model or Branching Strategy
Vivek Parihar
 
PDF
Git flow
DaeMyung Kang
 
PPTX
Advanced Git Presentation By Swawibe
Md Swawibe Ul Alam
 
PDF
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Junyoung Lee
 
PDF
Git을 조금 더 알아보자!
Young Kim
 
PDF
デザイナのためのGit入門
dsuke Takaoka
 
PDF
Git and Github
Wen-Tien Chang
 
PDF
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
 
Git - Level 2
민태 김
 
Git 입문자를 위한 가이드
chandler0201
 
Git 더하기 GitHub(구름IDE 환경)
Junyoung Lee
 
[NDC16] Effective Git
Chanwoong Kim
 
Advanced Git Tutorial
Sage Sharp
 
15分でわかるGit入門
to_ueda
 
Git One Day Training Notes
glen_a_smith
 
Git basics to advance with diagrams
Dilum Navanjana
 
Git이란 (Git 소개 및 기초 이론)
승용 윤
 
Learning git
Sid Anand
 
git and github
Darren Oakley
 
이클립스로 GIT 사용하기
우영 주
 
A Git Workflow Model or Branching Strategy
Vivek Parihar
 
Git flow
DaeMyung Kang
 
Advanced Git Presentation By Swawibe
Md Swawibe Ul Alam
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Junyoung Lee
 
Git을 조금 더 알아보자!
Young Kim
 
デザイナのためのGit入門
dsuke Takaoka
 
Git and Github
Wen-Tien Chang
 
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
 

Viewers also liked (20)

PDF
Git는 머꼬? GitHub는 또 머지?
Ian Choi
 
PDF
Github 으로 학교 팀 프로젝트 하기
nexusz99
 
PDF
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
민태 김
 
PDF
Git 기본개념과 사용법 그리고 어플리케이션
Dabi Ahn
 
PPTX
깨끗한 코드 (클린 코드, Clean Code)
Jay Park
 
PDF
읽기 좋은 코드가 좋은코드다
wonmin lee
 
PPTX
오픈소스 개발을 위한 Git 사용법 실습
BJ Jang
 
PDF
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
Aurimas Mikalauskas
 
PPTX
Git 사용 가이드
도형 임
 
PPTX
Svn에서 git으로 이주하기
Seunghwa Song
 
PDF
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
Ji-Woong Choi
 
PDF
외계어 스터디 3/5 function and object
민태 김
 
PDF
Sublime Text 3 for python and django
raccoony
 
PDF
외계어 스터디 4/5 Event & Library
민태 김
 
PDF
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #5.1
민태 김
 
PDF
MEAN Stack 기반 모바일 서비스 개발 overview
민태 김
 
PDF
Waterfall과 agile의 불편한 동거 public
민태 김
 
PDF
2014 ChattingCat service architecture
chattingcat
 
PPTX
인펙비전 영상인식 종합주차 관리시스템(2)
guest2d7179e
 
Git는 머꼬? GitHub는 또 머지?
Ian Choi
 
Github 으로 학교 팀 프로젝트 하기
nexusz99
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
민태 김
 
Git 기본개념과 사용법 그리고 어플리케이션
Dabi Ahn
 
깨끗한 코드 (클린 코드, Clean Code)
Jay Park
 
읽기 좋은 코드가 좋은코드다
wonmin lee
 
오픈소스 개발을 위한 Git 사용법 실습
BJ Jang
 
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
Aurimas Mikalauskas
 
Git 사용 가이드
도형 임
 
Svn에서 git으로 이주하기
Seunghwa Song
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
Ji-Woong Choi
 
외계어 스터디 3/5 function and object
민태 김
 
Sublime Text 3 for python and django
raccoony
 
외계어 스터디 4/5 Event & Library
민태 김
 
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
민태 김
 
비개발자를 위한 Javascript 알아가기 #5.1
민태 김
 
MEAN Stack 기반 모바일 서비스 개발 overview
민태 김
 
Waterfall과 agile의 불편한 동거 public
민태 김
 
2014 ChattingCat service architecture
chattingcat
 
인펙비전 영상인식 종합주차 관리시스템(2)
guest2d7179e
 
Ad

Similar to 버전관리를 들어본적 없는 사람들을 위한 DVCS - Git (20)

PDF
git-basic-commands
insanehong Kim
 
PPT
Git from google techtalks by Randal
yagurchoi
 
PPTX
Git
Yong Min Lee
 
PDF
About git
혜승 이
 
PDF
소스트리(SourceTree)로 배우는 Git 사용법
주형 고
 
PDF
버전관리시스템 종류와 소개
Jong-il Seok
 
PPTX
Git 기본
HyunWook Kang
 
PDF
Git: A Motivating Introduction
Jongwook Choi
 
PDF
해커스 가이드 투 깃
Jongdeok Kim
 
PDF
11. git basic
Geunhyung Kim
 
PDF
Git 코드랩 스터디 2
승빈이네 공작소
 
PPTX
Git lecture2
ssuseraf62e91
 
PDF
[17.02.09] Github introduction (Korean Version)
Ildoo Kim
 
PPTX
Git
Junyoung Lee
 
PPTX
Advanced git
chanwoo Jeong
 
PDF
Git Tutorial
Sanggyu Nam
 
PDF
Git tutorials
wonmin lee
 
PPTX
Git lecture1
ssuseraf62e91
 
PPTX
Git 꿀팁
진수 허
 
PPTX
Git의 개념과 사용
환민 홍
 
git-basic-commands
insanehong Kim
 
Git from google techtalks by Randal
yagurchoi
 
About git
혜승 이
 
소스트리(SourceTree)로 배우는 Git 사용법
주형 고
 
버전관리시스템 종류와 소개
Jong-il Seok
 
Git 기본
HyunWook Kang
 
Git: A Motivating Introduction
Jongwook Choi
 
해커스 가이드 투 깃
Jongdeok Kim
 
11. git basic
Geunhyung Kim
 
Git 코드랩 스터디 2
승빈이네 공작소
 
Git lecture2
ssuseraf62e91
 
[17.02.09] Github introduction (Korean Version)
Ildoo Kim
 
Advanced git
chanwoo Jeong
 
Git Tutorial
Sanggyu Nam
 
Git tutorials
wonmin lee
 
Git lecture1
ssuseraf62e91
 
Git 꿀팁
진수 허
 
Git의 개념과 사용
환민 홍
 
Ad

More from 민태 김 (20)

PDF
외계어 스터디 2/5 - Expressions & statements
민태 김
 
PDF
외계어 스터디 1/5 - Overview
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #7.1
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #7
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #6.1
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #6
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #5
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #4.1
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #4
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #3
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #2
민태 김
 
PDF
비개발자를 위한 Javascript 알아가기 #1
민태 김
 
PDF
AWS 구축 경험 공유
민태 김
 
PDF
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
민태 김
 
PDF
Knockout.js Overview
민태 김
 
PDF
스마트미디어 크로스플렛폼 개발 전략
민태 김
 
PDF
CANVAS, SVG, WebGL, CSS3, WebEvent
민태 김
 
PDF
Html5 game programming overview
민태 김
 
PDF
What is Hybrid Apps
민태 김
 
PDF
고품질웹앱개발전략
민태 김
 
외계어 스터디 2/5 - Expressions & statements
민태 김
 
외계어 스터디 1/5 - Overview
민태 김
 
비개발자를 위한 Javascript 알아가기 #7.1
민태 김
 
비개발자를 위한 Javascript 알아가기 #7
민태 김
 
비개발자를 위한 Javascript 알아가기 #6.1
민태 김
 
비개발자를 위한 Javascript 알아가기 #6
민태 김
 
비개발자를 위한 Javascript 알아가기 #5
민태 김
 
비개발자를 위한 Javascript 알아가기 #4.1
민태 김
 
비개발자를 위한 Javascript 알아가기 #4
민태 김
 
비개발자를 위한 Javascript 알아가기 #3
민태 김
 
비개발자를 위한 Javascript 알아가기 #2
민태 김
 
비개발자를 위한 Javascript 알아가기 #1
민태 김
 
AWS 구축 경험 공유
민태 김
 
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
민태 김
 
Knockout.js Overview
민태 김
 
스마트미디어 크로스플렛폼 개발 전략
민태 김
 
CANVAS, SVG, WebGL, CSS3, WebEvent
민태 김
 
Html5 game programming overview
민태 김
 
What is Hybrid Apps
민태 김
 
고품질웹앱개발전략
민태 김
 

버전관리를 들어본적 없는 사람들을 위한 DVCS - Git

  • 2. 텍스트 파일이 하나 있다 memo.txt
  • 4. 어떻게 할까? 수정할 때 마다 다른 파일로 저장 memo.txt memo1.txt memo2.txt
  • 5. 시간이 지나면 흠……. memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt
  • 6. 파일이 하나가 아니라면? 흠……. memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
  • 7. 수정하는 사람이 여러명이면? OTL memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo10.txt memo11.txt todo.txt todo1.txt todo2.txt todo3.txt todo4.txt todo5.txt todo6.txt todo7.txt todo8.txt todo9.txt todo10.txt todo11.txt lego.txt lego1.txt lego2.txt lego3.txt lego4.txt lego5.txt lego6.txt lego7.txt lego8.txt lego9.txt lego10.txt lego11.txt
  • 8. 폴더로 정리하면 되지 않을까? 이런 생각 하시는 분이 없기를 바랍니다 Memo Todo
  • 9. 어떻게 할까? 이런일을 전문으로 하는! 소프트웨어가 있다? 없다? Yes! 있다!
  • 11. 오늘은 git 을 배워봅시다 왜? 표지를 참고해주세요
  • 13. 첫 번째 문제로 돌아가봅시다 memo.txt 텍스트 파일이 하나 있고,! 수정한 내용을 기록해두고 싶다 “컵라면 1박스 구입” 이라는 수정이 발생
  • 14. memo.txt “수정”의 단계를 어느 정도까지 기록해야할까? 저장할 때 마다? ! 컵(Save)라(Save)면(Save)… 이런식으로! 저장했다해도 모두 기록해야할까?
  • 15. 규칙 1! “수정”의 단계는 “의미”를 기준으로 의미를 어떻게 알지?! SW가 의미를 인식할 수! 없으니 정할 수 있는 사람 즉,! 사용자가 정하는 것으로 하자
  • 16. 규칙 1! “수정”의 단계는 “의미”를 기준으로 이 파일의 수정이 끝났다 ! “이 파일의 의미있는 수준의 수정 작업이 끝났음” ! 이라고 git 에게 알려주는 일 commit
  • 17. memo.txt 맥주 구매 할 일 추가 쓰레기 봉투 구매 할 일 추가 컵라면 구매 할 일 추가 2014년 7월 10일 17:00 2014년 7월 9일 10:03 2014년 7월 6일 12:42 memo.txt memo.txt commit 1 commit 2 commit 3 @홍길동 @홍길동 @홍길동 세 번의 커밋
  • 18. 맥주 구매 할 일 추가 쓰레기 봉투 구매 할 일 추가 컵라면 구매 할 일 추가 2014년 7월 10일 17:00 2014년 7월 9일 10:03 2014년 7월 6일 12:42 commit 1 commit 2 commit 3 @홍길동 @홍길동 @홍길동 수정한 내용을 간략하게 표현하기! 위한 “커밋 메세지” 기록 수정 내용! 설명
  • 19. memo.txt 맥주 구매 할 일 추가 쓰레기 봉투, 컵라면 구매 할 일 추가 2014년 7월 10일 17:00 2014년 7월 6일 12:42 memo.txt commit 1 commit 2 @홍길동 @홍길동 두번만 할 수 도 있겠죠? 커밋의 기준을 정하는건 사용자.! 커밋의 단위를 작게 할 수록 변경 내용의 기록! 수준은 정밀해지며 파악할 수 있는 정보도 많아진다
  • 20. 규칙 2! 하나의 커밋(Commit)은 여러개의! 파일이 포함될 수 있다 “수정의 의미”를 확장하자! 하나의 파일을 수정하는 것,! 하나의 수정 작업이 여러 파일에 영향을! 줄 수 있는 것. 의미라는 관점에선 하나의! 수정이라고 할 수 있다
  • 21. 화요일.txt 월,화 자율 학습 일정 추가 수요일 학습 내용 추가 수,목,금 교육 시간 수정 2014년 7월 10일 17:00 2014년 7월 9일 10:03 2014년 7월 6일 12:42 commit 1 commit 2 commit 3 @홍길동 @홍길동 @홍길동 커밋은 수정의 단위. 수정은 여러 파일 에 걸친 변경 내역의 묶음일 수 있다. 월요일.txt 수요일.txt 수요일.txt 목요일.txt 금요일.txt
  • 22. 규칙 3! 파일을 수정하지 않고! 새로운 실험을 해 볼 순 없을까? 월,화,수,목,금 시간표 파일이 있는데 이 파일들을 변경하지 않고 새로운 월, 화,수,목,금 일정을 만들어 보고 싶다 가능할까?
  • 23. 규칙 3! 상태를 저장하는 공간을 만들 수 있다 상태란 모든것이다. 파일, 파일의 내용, 커밋 정보 등 git 이 관리하는 모든 것을 의미한다 branch
  • 24. git 의 시작! 지정한 폴더의 변경 내용을 추적하기위한 준비 선택된 폴더의 변경 내용을 추적하기 위해 git 저장소를 만든다. 저장소가 만들어지면 git은 지정한 폴더를 포함하여 하위 폴더의 모든 변 경 내용을 커밋 단위로 추적한다. init
  • 25. git 의 시작! 지정한 폴더의 변경 내용을 추적하기위한 준비 init 명령으로 저장소가 만들어질 때 git은 master라는 이름의 브랜치를 기본으로 생성하고 이 후 커밋 내용 을 브랜치 기준으로 저장한다 master
  • 26. 화요일.txt 월,화 자율 학습 일정 추가 수요일 학습 내용 추가 수,목,금 교육 시간 수정 2014년 7월 10일 17:00 2014년 7월 9일 10:03 2014년 7월 6일 12:42 commit 1 commit 2 commit 3 @홍길동 @홍길동 @홍길동 월요일.txt 수요일.txt 수요일.txt 목요일.txt 금요일.txt master 커밋은 브랜치 공간에 기록된다
  • 27. master 새로운 브랜치 만들기 파일을 수정하지 않고 새로운 실험 하기 화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt lab1 화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt branch lab1
  • 28. 새로 만든 브랜치 lab1 은 master와 완전히 동일한 상태를 가진 공간. lab1 브랜치에서 수정을 한 후 커밋하면 그 변경사항은 lab1에만 기록 되며 master 브랜치에는 어떤 영향도 주지 않음 lab1 화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt commit 1 화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt 완전히 독립된 브랜치 lab1
  • 29. lab1 원하는 만큼 브랜치 생성 가능 lab2 git 은 매우 빠르게 새로운 독립 공간인 브랜치를 원하는 만큼 만들 수 있다. 브랜치 이름은 이 름 정의 규칙 내에서 사용자가 원하는 형태로 작명할 수 있다
  • 30. master lab1 checkout master HEAD HEAD 실험 중 다른 브랜치로 돌아가야한다면? 원한다면 언제든 다른 브랜치 (작업 공간)로 이동할 수 있다. 브랜치는 마지막 커밋 상태를 유지한다. 작업 중인 위치를 가르키는 가 상의 커서가 존재하는데 이를 git 에서는 HEAD 라 한다.
  • 31. master lab1 checkout master HEAD HEAD 브랜치를 이동하는 이유가 뭘까? 새로운 실험을 하기 위해 lab1을 만들 고 열심히 작업하고 있다. 그런데 master 브랜치에 내용을 변경할 일이 발생했다. 어떻게 해야할까? 시나리오 master 브랜치로 이동하여 변경 작업 을 처리한 후 커밋. 다시 lab1 브랜치로 돌아와 하던 실험을 계속 한다. 정답
  • 32. 실험 종료. 선택의 순간 master lab1 lab1에서 진행했던 실험이 예상과 달리 필요없는 작업이 되었다. 어떻게 하면 될까? 실험 실패 master로 이동 후 lab1 브랜치를 삭제한다. lab1의 모든 기록이 제거 된다. 기록 보관 차원에서 삭제하지 않아도 아무 문제 없다 정답
  • 33. 실험 종료. 선택의 순간 master lab1 lab1에서 진행했던 실험이 성공 적으로 끝났다. 실험의 결과를 master 브랜치에 옮기려한다. 어떻게 하면 될까? 실험 성공 lab1 브랜치의 내용을 마스터 브랜치와 병합 (merge) 한다. 정답
  • 34. merge lab1 브랜치와 브랜치의 병합(Merge) master lab1 HEAD commit 3 commit 1 commit 2 commit 4 master 브랜치에 lab1 브랜 치를 병합하면 git 은 lab1 브 랜치의 내용과 master 브랜 치의 commit 3 의 내용을 포 함하여 두 브랜치를 병합한다 병합 결과 변경 내용에 따라 파일 내용이 변경되고 때론 파일이 삭제될 수 도 있으며 추가될 수 도 있다.
  • 35. 정리 commit! branch! checkout! merge 수정 내역을 사용자 기준의 의미로 기록한다 완전히 독립된 작업 공간을 만들 수 있다 독립된 작업 공간인 브랜치를 자유 롭게 이동할 수 있다. 브랜치와 브랜치간 내용을 병합할 수 있다
  • 36. 아직 해결되지 않은 문제 어떻게 다른 사람과! 함께 작업할 수 있을까?
  • 37. master lab1 우리는 git 저장소를 하나 가지고 있다.! 내 컴퓨터에 있기 때문에 나만 접근할 수 있다. 동료와 함께 작업 하려면?
  • 39. master lab1 동료와 함께 작업하려면? 복사를 시도해 볼 수 있겠다 복사는 단방향이다. 한번 주고 동료가 작업한 결과를 돌려 받 기 위해선 너무나 많은 어려움 이 예상된다 git은 “리모트
 저장소”를 지원한다
  • 40. master lab1 리모트 저장소가 있다면? remote.com/projectA master lab1 master lab1 project A project A project A 리모트 저장소 또한 원본 git 저장소와 동일한 저장소이다! 리모트 저장소를 경유하여 함께 작업할 동료도 완전히 동일한! 저장소를 다운로드 받을 수 있으며, 동일한 방식으로 작업 할 수 있다
  • 41. 리모트 저장소에서 저장소 다운로드 remote.com/projectA master lab1 master lab1 project A project A 리모트 저장소에서 처음으로 git 저장소를 다운로드 받는 것을 ! 복사본을 만든다는 의미로 clone 이라 한다. clone remote.com/projectA clone remote.com/projectA
  • 42. 리모트 저장소의 변경 내용 업데이트 remote.com/projectA master lab1 master lab1 project A project A 리모트 저장소의 변경된 내용을 로컬(내 컴퓨터) 저장소에 적용하는! 작업을 Pull 이라 한다. 이때 브랜치 병합과 같은 병합이 발생한다. pull origin pull origin
  • 43. 내 저장소(로컬 저장소)의 변경 내용 리모트로 전송하기 remote.com/projectA master lab1 master lab1 project A project A 로컬(내 컴퓨터) 저장소에서 작업한 내용을 리모트 저장소로! 보내는 작업을 Push라 한다. 함께 작업하는 동료에서 변경사항을 ! 전송하기 위해선 리모트 저장소를 경유해야 한다는 것을 알 수 있다. push origin push origin
  • 44. 리모트 저장소를 쉽게 만들고! 공유할 수 있는 대표적인 서비스가 있다
  • 45. git 사용법을 학습할 수 있는 다양한 콘텐츠 http://git-scm.com/book/ko http://pcottle.github.io/learnGitBranching/ Learn Git Branching Git 메뉴얼 (한글) https://try.github.io/levels/1/challenges/1 Code School - Try git https://www.atlassian.com/git/tutorial Atlassian git tutorial
  • 46. Kim min tae @ibare! NCSOFT http://ibare.kr https://medium.com/@ibare