SlideShare a Scribd company logo
1 of 83
Download to read offline
2014년 1월 5일
“누군가가 나의 등잔의 심지에서 불을 붙여가도
내 등잔의 불은 여전히 빛나고 있습니다.”
Git / GitHub 2주차
Mobile Convergence Laboratory
목차
• 지난 시간 궁금증 – git 파일 구조
• branch 소개
• merge 소개
• 충돌 다루기 – diff / blame 소개
• 사용 시나리오
• GitHub 사용 – 원격저장소 push/pull
• GitHub 사용 – Introducing GitHub
1 /Mobile Convergence Laboratory
Git의 파일 구조
Mobile Convergence Laboratory 2 /
Mobile Convergence Laboratory 3
Subversion (SVN, CVS…)
4 /Mobile Convergence Laboratory
CVS(Concurrnt Version System
SVN(Subversion)
형상관리 = 버전 관리
Subversion (SVN, CVS…)
5 /Mobile Convergence Laboratory
CVS(Concurrnt Version System
SVN(Subversion)
형상관리 = 버전 관리
해당 파일의 차이점
(delta)를 저장하여 버전
관리 기능을 수행한다.
Git의 방식
6 /Mobile Convergence Laboratory
Git의 방식
7 /Mobile Convergence Laboratory
시간순으로 프로젝트의 스냅
샷을 저장한다.
파일이 달라지지 않으면 저
장하지 않는다.
Mobile Convergence Laboratory 8 /
Mobile Convergence Laboratory 9 /
Mobile Convergence Laboratory 10 /
Mobile Convergence Laboratory 11 /
File1
File2
File3
커밋의 의미
12 /Mobile Convergence Laboratory
Mobile Convergence Laboratory 13 /
Snapshot
branch / merge
Mobile Convergence Laboratory 14 /
branch
• 상태를 저장하는 작업공간을 만든다.
• 안전하게 격리된 상태에서 추가 및 수정할 때 사용
• 상태?
파일, 파일의 내용, 커밋 정보 등 git이 관리하는 데이터.
15 /Mobile Convergence Laboratory
branch
• 저장소를 새로 만들게 되면 기본적으로 master branch 생성
• 다른 branch를 이용해서 개발을 진행하고, 나중에 개발이 완료
되면 master branch로 돌아와서 병합(merge)하면 된다.
16 /Mobile Convergence Laboratory
Mobile Convergence Laboratory 17 /
Master 통신 모듈
추가
GUI
구현
릴리즈
버전
추가
기능
Mobile Convergence Laboratory 18 /
Master 통신 모듈
추가
GUI
구현
릴리즈
버전
추가
기능
Mobile Convergence Laboratory 19 /
Master 통신 모듈
추가
GUI
구현
릴리즈
버전
추가
기능Branch
Mobile Convergence Laboratory 20 /
Master 통신 모듈
추가
GUI
구현
릴리즈
버전
추가
기능Branch Merge
21 /Mobile Convergence Laboratory
22 /Mobile Convergence Laboratory
Master
브랜치의 종류
• 통합 브랜치(Integration Branch)
• 언제든지 배포할 수 있는 버전
• 안정적인 버전
• 토픽 브랜치(Topic Branch)
• 기능 추가나 버그 수정과 같은 단위 작업을 위한 브랜치
23 /Mobile Convergence Laboratory
Mobile Convergence Laboratory 24 /
브랜치 만들기(git branch 브랜치명)
• ex> git branch add_file2
25 /Mobile Convergence Laboratory
브랜치 목록
• git branch
• ‘*’가 붙어있는 것이 현재 선택된 브랜치이다.
26 /Mobile Convergence Laboratory
브랜치 전환하기
• git checkout 브랜치이름
27 /Mobile Convergence Laboratory
Mobile Convergence Laboratory 28 /
git branch add_file2
브랜치 삭제하기
• git branch –d 브랜치이름
Mobile Convergence Laboratory 29 / 22
Merge(병합하기)
• git merge 커밋이름
• 병합할 커밋이름을 넣어 실행하면 지정한 커밋 내용이 Head가
가리키고 있는 브랜치에 병합된다.
Mobile Convergence Laboratory 30 / 22
Merge(병합하기)
Mobile Convergence Laboratory 31 / 22
result += num
Merge(병합하기)
Mobile Convergence Laboratory 32 / 22
result += num
33 / 22
작업 공간
(working dir)
로컬 저
장소
(head)
인덱스
(staging area)
Git
add commit
Mobile Convergence Laboratory
result
Merge(병합하기)
Mobile Convergence Laboratory 34 / 22
master += branch
Merge(병합하기)
• 병합하기 전, master 브랜치를 chechout 해서 Head에 위치시켜
야 한다.
• git checkout master
Mobile Convergence Laboratory 35 / 22
36 / 22
작업 공간
(working dir)
로컬 저
장소
(head)
인덱스
(staging area)
Git
add commit
Mobile Convergence Laboratory
master
Mobile Convergence Laboratory 37 / 22
master
branch
modified
branch
Mobile Convergence Laboratory 38 / 22
master
branch
modified
branch
Mobile Convergence Laboratory 39 / 22
master
branch
modified
branch
Mobile Convergence Laboratory 40 / 22
master
branch
modified
branch
file.c 수정
&
class.h 추가
데모
Mobile Convergence Laboratory 41 /
데모
Mobile Convergence Laboratory 42 /
‘modified’ 브랜치
생성
데모
Mobile Convergence Laboratory 43 /
‘modified’ 브랜치
변경
데모
Mobile Convergence Laboratory 44 /
• 변경된 modified 브랜치로 변경 내역 commit
• master 브랜치를 checkout으로 가져오기
데모
Mobile Convergence Laboratory 45 /
• merge
• ‘+’ 몇 줄 추가되었는지,
Merge(병합하기)
Mobile Convergence Laboratory 46 / 22
master += modified
차이점 확인하기
Mobile Convergence Laboratory 47 /
• git diff
차이점 확인하기
Mobile Convergence Laboratory 48 /
차이점 확인하기
• git diff : 현재 작업 트리와 인덱스의 차이점 보기
• git diff HEAD : 작업 트리와 저장소의 차이점 보기
• git diff --cached : 인덱스와 저장소의 차이점 보기
• git diff 시작지점 : 작업 트리와 특정 위치 간의 차이점 보기
(시작지점은 커밋명이나 브랜치명, 파일명)
• git diff 시작지점 끝지점 : 저장소의 두 지점 사이의 차이점 보
기
Mobile Convergence Laboratory 49 / 22
수정사항 및 충돌 다루기
충돌 다루기
blame 명령어
Mobile Convergence Laboratory 50 /
충돌 다루기
• 두 개의 다른 브랜치에서 동일한 파일을 다르게 편집한 후 합칠
때 충돌이 발생
• 이때 git에서 자동으로 merge를 할 수 없게 된다.
Mobile Convergence Laboratory 51 /
Mobile Convergence Laboratory 52 /
a_side
브랜치
1. apple
추가
1. grape
추가
릴리즈
버전
b_side
브랜치
Mobile Convergence Laboratory 53 /
a_side
브랜치
1. apple
추가
1. grape
추가
릴리즈
버전
b_side
브랜치
Mobile Convergence Laboratory 54 /
a_side
브랜치
1. apple
추가
1. grape
추가
릴리즈
버전
b_side
브랜치
같은 파일에서
두 번째 문장을
다르게 편집
충돌 발생
Mobile Convergence Laboratory 55 /
• 충돌이 난 파일에
충돌 사항에 대해
로깅이 된다.
수정사항 추적하기(누구 책임인지 찾기)
• git blame 파일이름
• 파일의 각 줄 앞에 커밋명, 커밋한 사용자, 시간 정보 출력
Mobile Convergence Laboratory 56 /
수정사항 추적하기(누구 책임인지 찾기)
• git blame 파일이름
• 파일의 각 줄 앞에 커밋명, 커밋한 사용자, 시간 정보 출력
Mobile Convergence Laboratory 57 /
원격 저장소 – push/pull
Mobile Convergence Laboratory 58 /
로컬 저장소 -> 원격 저장소 연결
• git remote add origin git@github.com:사용자ID/저장소이름.git
• origin:원격저장소 / master:로컬 저장소
• 원격 저장소 주소
• SSH : git@github.com:아이디/프로젝트.git
• git 프로토콜 : git://github.com/아이디/프로젝트.git
• HTTPS : https://github.com/아이디/프로젝트.git
Mobile Convergence Laboratory 59 / 22
push와 pull
Mobile Convergence Laboratory
작업 공간
(working dir)
로컬 저
장소
(head)
원격 저장소
인덱스
(staging area)
Git GitHub
add commit push
pull
push
pull
• git pull 원격저장소
원격 저장소에서 변경 사항을 가져와 현재 브랜치에 합치기
• git pull
origin 저장소에서 변경 사항을 가져와 현재 브랜치에 합치기
Mobile Convergence Laboratory 61 / 22
push
• git push
지역 변경 사항을 origin 저장소에 푸싱
• git push <원격저장소> <지역브랜치>
지역 브랜치를 동인한 이름의 원격브랜치에 푸싱
• git push <원격저장소> <지역브랜치>:<원격브랜치>
지역 브랜치를 원격 브랜치에 푸싱
Mobile Convergence Laboratory 62 / 22
fetch
• pull 명령어 같은 경우 특정 브랜치나 커밋을 가져와서 현재 브랜치
에 병합해버리는 한계가 존재
• fetch를 사용하면 특정 브랜치(FETCH_HEAD)에 가져올 수 있다.
• pull = fetch + merge
Mobile Convergence Laboratory 63 / 22
fetch
Mobile Convergence Laboratory 64 / 22
원격 저장소의 브랜치
로컬 저장소의 브랜치
GitHub 자체 기능
Introducing GitHub
Mobile Convergence Laboratory 65 /
프로젝트 소개 페이지
Mobile Convergence Laboratory 66 / 22
readme 웹 뷰
Mobile Convergence Laboratory 67 / 22
프로젝트 브랜치의 정보
Mobile Convergence Laboratory 68 / 22
커밋에 대한 정보(git log 기능)
Mobile Convergence Laboratory 69 / 22
contributo별 커밋 그래프
Mobile Convergence Laboratory 70 / 22
주간 변경된 코드량
Mobile Convergence Laboratory 71 / 22
collaborator 추가
Mobile Convergence Laboratory 72 / 22
Open HUB 소개
Mobile Convergence Laboratory 73 /
OpenHUB or Ohloh
74 /Mobile Convergence Laboratory
• 66만개 이상의 프로젝트들이 등록된 통계 사이트
• 개발자 정보 / 프로젝트 정보를 열람할 수 있다.
• github을 포함한 수많은 호스팅 서비스에 등록된 프로젝트와
openflow, linux와 같이 특정 단체에서 따로 관리하는 프로젝트
까지 모두 볼 수 있다.
75 /Mobile Convergence Laboratory
오픈소스 계의
76 /Mobile Convergence Laboratory
77 /Mobile Convergence Laboratory
78 /
79 /
80 /
참고
• http://git-scm.com/
• Git, 분산버전 관리시스템, 트라비스 스위스굿
• Git 어떻게 동작하는가?, John Wiegley
• http://backlogtool.com/git-guide/kr/
81 /Mobile Convergence Laboratory
Q&A
82 /Mobile Convergence Laboratory

More Related Content

What's hot

버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
Jong-il Seok
 

What's hot (20)

Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case study
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1
 
KhuHub student guideline
KhuHub student guidelineKhuHub student guideline
KhuHub student guideline
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub
 
Advanced git
Advanced gitAdvanced git
Advanced git
 
Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git 코드랩 스터디 2
Git 코드랩 스터디 2Git 코드랩 스터디 2
Git 코드랩 스터디 2
 
Git 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with gitGit 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with git
 
140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴
 

Similar to Git & Github Seminar-2

Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
Yunkyu Choi
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randal
yagurchoi
 

Similar to Git & Github Seminar-2 (20)

Git
GitGit
Git
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git command
Git commandGit command
Git command
 
Git 기본
Git 기본Git 기본
Git 기본
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randal
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
Git
Git Git
Git
 
Git
GitGit
Git
 
Git
GitGit
Git
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
git-workflow
git-workflowgit-workflow
git-workflow
 
[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 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습
 
오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
Git server 구축(git olite,gitweb)
Git server 구축(git olite,gitweb)Git server 구축(git olite,gitweb)
Git server 구축(git olite,gitweb)
 
[VCS] Git&GitLab_Designer
[VCS] Git&GitLab_Designer[VCS] Git&GitLab_Designer
[VCS] Git&GitLab_Designer
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 

More from sangyun han

More from sangyun han (14)

SDN, ONOS, and Network Virtualization
SDN, ONOS, and Network VirtualizationSDN, ONOS, and Network Virtualization
SDN, ONOS, and Network Virtualization
 
Introduce to OpenVirteX
Introduce to OpenVirteXIntroduce to OpenVirteX
Introduce to OpenVirteX
 
XOS in open CORD project
XOS in open CORD projectXOS in open CORD project
XOS in open CORD project
 
Introduction to CORD project
Introduction to CORD projectIntroduction to CORD project
Introduction to CORD project
 
OpenWRT/Hostapd with ONOS
OpenWRT/Hostapd with ONOSOpenWRT/Hostapd with ONOS
OpenWRT/Hostapd with ONOS
 
KhuHub professor guideline
KhuHub professor guidelineKhuHub professor guideline
KhuHub professor guideline
 
ONOS - multiple instance setting(Distributed SDN Controller)
ONOS - multiple instance setting(Distributed SDN Controller)ONOS - multiple instance setting(Distributed SDN Controller)
ONOS - multiple instance setting(Distributed SDN Controller)
 
ONOS - setting, configuration, installation, and test
ONOS - setting, configuration, installation, and testONOS - setting, configuration, installation, and test
ONOS - setting, configuration, installation, and test
 
Introduction of ONOS and core technology
Introduction of ONOS and core technologyIntroduction of ONOS and core technology
Introduction of ONOS and core technology
 
ONOS와 Raspberry Pi 기반 가상물리 SDN 실증 환경 구축과 응용 개발
ONOS와 Raspberry Pi 기반 가상물리 SDN 실증 환경 구축과 응용 개발ONOS와 Raspberry Pi 기반 가상물리 SDN 실증 환경 구축과 응용 개발
ONOS와 Raspberry Pi 기반 가상물리 SDN 실증 환경 구축과 응용 개발
 
[SoftCon]SDN/IoT 그리고 Testbed
[SoftCon]SDN/IoT 그리고 Testbed[SoftCon]SDN/IoT 그리고 Testbed
[SoftCon]SDN/IoT 그리고 Testbed
 
RAFT Consensus Algorithm
RAFT Consensus AlgorithmRAFT Consensus Algorithm
RAFT Consensus Algorithm
 
Hazelcast 소개
Hazelcast 소개Hazelcast 소개
Hazelcast 소개
 
Implementing SDN Testbed(ONOS & OpenVirteX)
Implementing SDN Testbed(ONOS & OpenVirteX)Implementing SDN Testbed(ONOS & OpenVirteX)
Implementing SDN Testbed(ONOS & OpenVirteX)
 

Git & Github Seminar-2