Your SlideShare is downloading. ×
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...
파일이 하나가 아니라면?
흠…….
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt memo...
수정하는 사람이 여러명이면?
OTL
memo.txt memo1.txt memo2.txt memo3.txt memo4.txt memo5.txt memo6.txt memo7.txt memo8.txt memo9.txt mem...
폴더로 정리하면 되지 않을까?
이런 생각 하시는 분이 없기를 바랍니다
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....
맥주 구매 할 일 추가
쓰레기 봉투 구매 할 일 추가
컵라면 구매 할 일 추가
2014년 7월 10일 17:00
2014년 7월 9일 10:03
2014년 7월 6일 12:42
commit 1
commit 2
commi...
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...
규칙 3!
파일을 수정하지 않고!
새로운 실험을 해 볼 순 없을까?
월,화,수,목,금 시간표 파일이 있는데
이 파일들을 변경하지 않고 새로운 월,
화,수,목,금 일정을 만들어 보고 싶다
가능할까?
규칙 3!
상태를 저장하는 공간을 만들 수 있다
상태란 모든것이다. 파일, 파일의
내용, 커밋 정보 등 git 이 관리하는
모든 것을 의미한다
branch
git 의 시작!
지정한 폴더의 변경 내용을 추적하기위한 준비
선택된 폴더의 변경 내용을 추적하기 위해 git
저장소를 만든다. 저장소가 만들어지면 git은
지정한 폴더를 포함하여 하위 폴더의 모든 변
경 내용을 커밋 ...
git 의 시작!
지정한 폴더의 변경 내용을 추적하기위한 준비
init 명령으로 저장소가 만들어질 때
git은 master라는 이름의 브랜치를
기본으로 생성하고 이 후 커밋 내용
을 브랜치 기준으로 저장한다
master
화요일.txt
월,화 자율 학습 일정 추가
수요일 학습 내용 추가
수,목,금 교육 시간 수정
2014년 7월 10일 17:00
2014년 7월 9일 10:03
2014년 7월 6일 12:42
commit 1
commit...
master
새로운 브랜치 만들기
파일을 수정하지 않고 새로운 실험 하기
화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.txt
lab1
화요일.txt월요일.txt 수요일.txt 목요일.txt 금요일.tx...
새로 만든 브랜치 lab1 은 master와 완전히 동일한 상태를 가진 공간.
lab1 브랜치에서 수정을 한 후 커밋하면 그 변경사항은 lab1에만 기록
되며 master 브랜치에는 어떤 영향도 주지 않음
lab1
화요...
lab1
원하는 만큼 브랜치 생성 가능
lab2
git 은 매우 빠르게 새로운 독립
공간인 브랜치를 원하는 만큼
만들 수 있다. 브랜치 이름은 이
름 정의 규칙 내에서 사용자가
원하는 형태로 작명할 수 있다
master
lab1
checkout master
HEAD
HEAD
실험 중 다른 브랜치로 돌아가야한다면?
원한다면 언제든 다른 브랜치
(작업 공간)로 이동할 수 있다.
브랜치는 마지막 커밋 상태를
유지한다.
작업 중인...
master
lab1
checkout master
HEAD
HEAD
브랜치를 이동하는 이유가 뭘까?
새로운 실험을 하기 위해 lab1을 만들
고 열심히 작업하고 있다. 그런데
master 브랜치에 내용을 변경할 일이
발...
실험 종료. 선택의 순간
master
lab1
lab1에서 진행했던 실험이
예상과 달리 필요없는 작업이
되었다. 어떻게 하면 될까?
실험 실패
master로 이동 후 lab1 브랜치를
삭제한다. lab1의 모든 기록이 ...
실험 종료. 선택의 순간
master
lab1
lab1에서 진행했던 실험이 성공
적으로 끝났다. 실험의 결과를
master 브랜치에 옮기려한다.
어떻게 하면 될까?
실험 성공
lab1 브랜치의 내용을
마스터 브랜치와 병...
merge lab1
브랜치와 브랜치의 병합(Merge)
master
lab1
HEAD
commit 3
commit 1
commit 2
commit 4
master 브랜치에 lab1 브랜
치를 병합하면 git 은 lab1...
정리
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 저장소를 다운로드 받는 것을 !
복사...
리모트 저장소의 변경 내용 업데이트
remote.com/projectA
master
lab1
master
lab1
project A
project A
리모트 저장소의 변경된 내용을 로컬(내 컴퓨터) 저장소에 적용하는!
...
내 저장소(로컬 저장소)의 변경 내용 리모트로 전송하기
remote.com/projectA
master
lab1
master
lab1
project A
project A
로컬(내 컴퓨터) 저장소에서 작업한 내용을 리모트...
리모트 저장소를 쉽게 만들고!
공유할 수 있는 대표적인 서비스가 있다
git 사용법을 학습할 수 있는 다양한 콘텐츠
http://git-scm.com/book/ko
http://pcottle.github.io/learnGitBranching/
Learn Git Branching
Git 메...
Kim min tae @ibare!
NCSOFT http://ibare.kr https://medium.com/@ibare
Upcoming SlideShare
Loading in...5
×

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

48,316

Published on

Git, DVCS Overview

Published in: Education
16 Comments
492 Likes
Statistics
Notes
No Downloads
Views
Total Views
48,316
On Slideshare
0
From Embeds
0
Number of Embeds
64
Actions
Shares
0
Downloads
0
Comments
16
Likes
492
Embeds 0
No embeds

No notes for slide

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

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

×