SlideShare une entreprise Scribd logo
1  sur  46
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

Contenu connexe

Tendances

버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)승용 윤
 
Git and Github slides.pdf
Git and Github slides.pdfGit and Github slides.pdf
Git and Github slides.pdfTilton2
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagramsDilum Navanjana
 
오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습BJ Jang
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 
Introduction to Git and GitHub
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHubVikram SV
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsLee Hanxue
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육승엽 신
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With GitNick Quaranto
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 

Tendances (20)

Git best practices workshop
Git best practices workshopGit best practices workshop
Git best practices workshop
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
GitHub Basics - Derek Bable
GitHub Basics - Derek BableGitHub Basics - Derek Bable
GitHub Basics - Derek Bable
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
Git and Github slides.pdf
Git and Github slides.pdfGit and Github slides.pdf
Git and Github slides.pdf
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagrams
 
Introduction git
Introduction gitIntroduction git
Introduction git
 
오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
Introduction to Git and GitHub
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHub
 
Git
GitGit
Git
 
Git training v10
Git training v10Git training v10
Git training v10
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
Git Grundlagen
Git GrundlagenGit Grundlagen
Git Grundlagen
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 

En vedette

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

En vedette (20)

Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Svn에서 git으로 이주하기
Svn에서 git으로 이주하기
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
Sublime Text 3 for python and django
Sublime Text 3 for python and djangoSublime Text 3 for python and django
Sublime Text 3 for python and django
 
외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library
 
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
 
비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
Waterfall과 agile의 불편한 동거 public
Waterfall과 agile의 불편한 동거 publicWaterfall과 agile의 불편한 동거 public
Waterfall과 agile의 불편한 동거 public
 
2014 ChattingCat service architecture
2014 ChattingCat service architecture2014 ChattingCat service architecture
2014 ChattingCat service architecture
 
인펙비전 영상인식 종합주차 관리시스템(2)
인펙비전 영상인식 종합주차 관리시스템(2)인펙비전 영상인식 종합주차 관리시스템(2)
인펙비전 영상인식 종합주차 관리시스템(2)
 
2015년 7월의 D.PARTY_ 이노온 박태림 대표 발표자료
2015년 7월의 D.PARTY_ 이노온 박태림 대표 발표자료 2015년 7월의 D.PARTY_ 이노온 박태림 대표 발표자료
2015년 7월의 D.PARTY_ 이노온 박태림 대표 발표자료
 

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

Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
 
해커스 가이드 투 깃
해커스 가이드 투 깃해커스 가이드 투 깃
해커스 가이드 투 깃Jongdeok Kim
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating IntroductionJongwook Choi
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기Wooyoung Ko
 
소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법주형 고
 
리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 githubJungHoon Lee
 
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀 Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀 주형 고
 
git 간단한 사용방법
git 간단한 사용방법git 간단한 사용방법
git 간단한 사용방법Oh Dongju
 
[NEXT 프연 Week1] Git 시작하기
[NEXT 프연 Week1] Git 시작하기[NEXT 프연 Week1] Git 시작하기
[NEXT 프연 Week1] Git 시작하기Young-Ho Cho
 
디자이너를위한Git #1/2
디자이너를위한Git #1/2디자이너를위한Git #1/2
디자이너를위한Git #1/2Choulhyouc Lee
 
0508. git basic
0508. git basic0508. git basic
0508. git basic민정 김
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드chandler0201
 
깃허브 시작하기
깃허브 시작하기깃허브 시작하기
깃허브 시작하기진태 이
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
GIT_GETCHA_HANJUNG
GIT_GETCHA_HANJUNGGIT_GETCHA_HANJUNG
GIT_GETCHA_HANJUNGJung Han
 

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

Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
 
해커스 가이드 투 깃
해커스 가이드 투 깃해커스 가이드 투 깃
해커스 가이드 투 깃
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
Git basic
Git basicGit basic
Git basic
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
Git
Git Git
Git
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법소스트리(SourceTree)로 배우는 Git 사용법
소스트리(SourceTree)로 배우는 Git 사용법
 
리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github
 
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀 Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
 
git 간단한 사용방법
git 간단한 사용방법git 간단한 사용방법
git 간단한 사용방법
 
[NEXT 프연 Week1] Git 시작하기
[NEXT 프연 Week1] Git 시작하기[NEXT 프연 Week1] Git 시작하기
[NEXT 프연 Week1] Git 시작하기
 
디자이너를위한Git #1/2
디자이너를위한Git #1/2디자이너를위한Git #1/2
디자이너를위한Git #1/2
 
0508. git basic
0508. git basic0508. git basic
0508. git basic
 
Git lecture1
Git lecture1Git lecture1
Git lecture1
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드
 
깃허브 시작하기
깃허브 시작하기깃허브 시작하기
깃허브 시작하기
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
GIT_GETCHA_HANJUNG
GIT_GETCHA_HANJUNGGIT_GETCHA_HANJUNG
GIT_GETCHA_HANJUNG
 

Plus de 민태 김

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

Plus de 민태 김 (20)

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