SlideShare a Scribd company logo
1 of 26
Git의 개념과 사용
홍환민
2016.1.12
버전 관리 시스템이란?
일반적인 경우, 작업한 파일의 최종본만을 가지고 있게 되지만, 버전 관리 시스템
사용시 파일의 변경 이력도 보존 가능. (파일 복원 가능.)
저장소(레파지토리)라고 불리는 일종의 데이터베이스에 파일과 변경내역을 저장.
이전 버전(변경 전)의 파일 히스토리까지 보존하고 관리할 수 있어 여러가지 이점이
생김.
버전 관리 시스템 사용시 장점
소스 파일을 서버에 안전하게 보관.
팀끼리 소스 공유 및 협업이 편리.
작업하다 아니다 싶으면 이전 버전의 소스로 복원 가능.
특정 시점의 소스, 고객사별 소스를 별도로 관리하지 않아도 됨. (통합 관리 및 복원
가능)
변경 내역 확인 가능. (예: 특정 기간동안 소스의 수정된 부분들을 확인하여 버그 발
생 부분을 찾는데 용이)
버전관리
중앙집중식 버전 관리 (SVN) 분산 버전 관리 시스템 (Git)
로컬 저장소와 원격 저장소
각 개발자 컴퓨터에도 로컬 저장소가
있는 것이 차이!
로컬 저장소
원격 저장소
기본적으로는 로컬에서 작업
기본적으로는 로컬에서 (로컬저장소와) 작업을 한다고 생각하면 된다.
그리고 필요할 때만 (다른 개발자와 변경된 소스를 공유할 필요가 있을 때) 원격 저
장소와 동기화.
그래서 사용하게 되는 대부분의 명령어가 로컬 저장소를 대상으로 한 명령.
서버와 동기화를 위한 명령은 Push(로컬 저장소 => 원격 저장소), Pull (원격 저장소
=> 로컬 저장소) 정도.
(기존에 SVN을 사용해 봤다면 SVN의 서버 저장소가 Git의 로컬 저장소라고 생각
하면 편하다. 거기에 원격 저장소라는 단계가 하나 더 추가된 꼴.)
로컬 저장소를 두는 장점
인터넷이 안되는 상황 (출장 등)에서도 버전 관리가 가능.
주로 로컬 저장소에서 작업을 하므로 속도가 월등히 빠름.
일단 로컬 저장소를 대상으로 작업하기 때문에 비교적 마음 편하게 버전 관리가 가
능.
원격 저장소의 데이터가 소실되었을 때, 로컬 저장소를 이용하여 복원 가능.
전세계에 걸친 오픈소스 개발에 적합. (Git은 리눅스 커널 개발을 위해 리누스 토발
즈가 개발한 것.)
혼자서 버전 관리하기도 편함.
우리가 사용하는 Git 호스팅 서비스는?
비트버킷!
(Bitbucket)
https://bitbucket.org
Git 클라이언트
SourceTree (윈도우즈, 맥) TortoiseGit (윈도우즈, 탐색기에 통합)
커밋 히스토리
커밋
커밋과 커밋 식별자
변경사항을 로컬 저장소에 올리는 것도 커밋이라고 하고, 그 결과물인 해당 시점의
데이터도 커밋이라고 부름.
커밋을 식별하기 위해 SVN은 리비전 번호를 사용. (일련 번호)
예: 789
Git은 SHA-1 해시값 사용. (문자+숫자)
예: 24b9da6552252987aa493b52f8696cd6d3b00373
너무 길다? 앞부분만 적어도 가능.
최초로 원격 저장소 받아오기 (복제)
원격 저장소가 이미 구성되어 있다면, 최초에 한번 (그리고 로컬 저장소를 날린 경
우) 받아와야 한다.
Clone
원격 저장소를 로컬 저장소로 복제해 오므로, 명령어 이름을 Clone 이라고 한다.
원격 저장소의 최신 상태를 가져오는 게 아니라, 기존의 히스토리까지 모두 복사해
오므로 복제이다!
워킹 디렉토리 / 스테이징 영역 / 로컬 저장소
워킹 디렉토리 : 개발자 실
제 디스크에 보이는 파일들
스테이징 영역 : 로컬 저장
소에 커밋할 대상이 되도록
추가한 파일들이 위치한 영
역 (논리 영역)
로컬 저장소 : 말그대로. (해
당 프로젝트의 .git 디렉토리)
파일의 상태
수정한 파일을 로컬 저장소에 적용(커밋)하기
기존의 시스템(SVN 등)은 파
일이 변화되면 파일의 변경된
내용 부분만 저장
Git은 '스냅샷'이라고 해서 변
화된 파일은 통째로 저장
장점 : 속도가 빠름, 비교적 버
전/브랜치 이동 및 병합이 잘
됨
스냅샷
Commit 시 유의할 점
가능하면 단일 작업 단위별로 커밋한다. (기능 한가지 추가, 버그 한가지 수정)
(스테이징 기능을 이용하면 편리.)
커밋 메시지(커밋 로그)를 잘 작성한다. (나중에 가장 많이 보게 될 내용이므로)
Push / Pull
Push
내 로컬 저장소에 추가한 커밋들을 원격 저장소에 올린다.
Pull
원격 저장소에 변경된 내용을 내 로컬 저장소로 받아온다.
Push 하기 전에 원격 서버에 변경된 사항이 있으면 먼저 Pull 해와서 병합한 후, Push
하도록 강제되어 있다. (그래서 Push 하기 전에는 Pull을 먼저 하는 습관을 들이는 것
이 좋다.)
작업내용 되돌리기 (복원)
방금 한 커밋이 잘못 되었다면?
덮어서 커밋 가능 (amend 옵션을 준 커밋) (커밋 메시지 수정, 빠트린 파일 추가)
특정 커밋의 내용으로 이동하기
체크아웃! (워킹 디렉토리의 파일들이 해당 커밋으로 변경됨. 주로 조회용.)
특정 커밋의 내용으로 원복하기
리셋! (주로 최신 커밋으로만 리셋. 임시 작업 내용을 날릴때.)
위의 명령어는 모두 로컬 저장소를 대상으로 함.
태그
특정 커밋에 태그를 남김. (중요함을 나타내는 일종의 책갈피?)
주로 새 버전이 릴리즈 될 때마다 해당 커밋에 태그를 남김.
태그를 이용하여 해당 릴리즈 버전의 소스를 찾아 복원하기 편함. (다시 빌드, 수정)
태그명 예: v1.0
브랜치와 병합 #1
소스의 히스토리를 일종의 나무(트리)라고 본다면 갈래가 나눠져 나온 것을 가지(브랜치)
라고 함.
따로 브랜치를 생성하지 않으면 메인 브랜치만 존재. (기본 메인 브랜치명: master)
브랜치로 나누면 충돌없이 동시에 작업이 가능.
예) 메인 브랜치: 프로덕션 코드 / 브랜치 A: 기능 추가 / 브랜치 B: 버그 수정 / 브랜치 C:
특정 고객사 커스터마이징
브랜치로 나누다가 작업이 완료되면, 메인 브랜치에 합침. 이를 병합(Merge)라고 함.
브랜치를 따서 작업하고 병합하는 것을 반복하며 개발.
Git은 브랜치를 적극적으로 사용할 것을 권장. 기존 시스템에 비해 브랜칭과 머지 잘됨.
브랜치와 병합 #2
체크아웃
로컬 저장소로부터 특정 시점의 커밋(소스 파일)을 끌어오는 개념이라고 이해하면
편함.
같은 브랜치 내의 특정 시점의 커밋을 체크아웃하면 해당 파일들이 워킹 디렉토리
에 복원됨.
다른 브랜치를 체크아웃하면 해당 브랜치의 파일들이 워킹 디렉토리에 복원됨.
그래서 과거 커밋의 소스 파일을 살펴보거나, 브랜치를 전환하여 작업할 때 사용.
기존의 버전 관리 시스템과 달리 Git은 물리적인 파일들이 순식간에 교체된다.
(브랜치를 별도의 하위 디렉토리로 관리하는 방식이 아니다.)
충돌 (Conflict)
기본적으로는 Git 시스템이 알아서 변경된 부분들을 병합을 해주지만, 병합에 실패
하여 충돌(Conflict)가 나는 경우들이 생김.
저장소로부터 파일을 받아왔을 때, 내 워킹 디렉토리에 수정한 파일이 있고, 두 파
일의 같은 부분이 수정되어 있을 경우 발생.
뭔가 짜증나고 곤란한 상황.
같은 부분이 수정되었기 때문에 논리상 어쩔 수 없다. 알아서 해줄 방법이 없다. 수
동으로 해결.
알아서 하거나, 수정을 한 상대방과 논의하여 병합.
물론 버전 관리 시스템(Git)의 사용법을 익히고 적응하는 것도 쉬운 일은 아니지만,
어떤 규칙과 정책으로 소스와 버전을 관리해 나갈지가 중요하고도 어려운 문제. (특
히 브랜칭 정책.)
소프트웨어의 버전 관리를 어떻게 할 것인가가 버전 관리 시스템 운영과도 연관됨.
의미 있는 단위로 변경 이력을 남긴다는 측면을 유의하는 게 좋음. (커밋 단위를 좀
더 의미있게. 과거 커밋들을 날리는 작업은 지양.)
그럼에도, 일단 서버에 소스를 백업하고 팀과 공유한다 정도로 생각하고 시작해도
충분.
향후 관건
시연
Q/A

More Related Content

What's hot

GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육승엽 신
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
git, git flow
git, git flowgit, git flow
git, git floweva
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Hyunjun Roh
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)승용 윤
 
디자이너를위한Git #1/2
디자이너를위한Git #1/2디자이너를위한Git #1/2
디자이너를위한Git #1/2Choulhyouc Lee
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드도형 임
 
How to use Github? (For Cien)
How to use Github? (For Cien)How to use Github? (For Cien)
How to use Github? (For Cien)민수 김
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기우영 주
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Junyoung Lee
 
Git 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with gitGit 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with gitSeongSik Kim
 
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
 
[기초] GIT 교육 자료
[기초] GIT 교육 자료[기초] GIT 교육 자료
[기초] GIT 교육 자료JUNPIL PARK
 

What's hot (20)

Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
11. git basic
11. git basic11. git basic
11. git basic
 
git, git flow
git, git flowgit, git flow
git, git flow
 
Git
GitGit
Git
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 
Git 강별
Git   강별Git   강별
Git 강별
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
Github 사용법
Github 사용법Github 사용법
Github 사용법
 
디자이너를위한Git #1/2
디자이너를위한Git #1/2디자이너를위한Git #1/2
디자이너를위한Git #1/2
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
How to use Github? (For Cien)
How to use Github? (For Cien)How to use Github? (For Cien)
How to use Github? (For Cien)
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Advanced git
Advanced gitAdvanced git
Advanced git
 
Git 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with gitGit 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with git
 
Git 코드랩 스터디 1
Git 코드랩 스터디 1Git 코드랩 스터디 1
Git 코드랩 스터디 1
 
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
 
[기초] GIT 교육 자료
[기초] GIT 교육 자료[기초] GIT 교육 자료
[기초] GIT 교육 자료
 

Viewers also liked

Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
무엇이 무엇이 닮았을까?- OpenStack과 Azure
무엇이 무엇이 닮았을까?- OpenStack과 Azure무엇이 무엇이 닮았을까?- OpenStack과 Azure
무엇이 무엇이 닮았을까?- OpenStack과 AzureIan Choi
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerlcharsbar
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkVolker Hirsch
 
Git 개념 및 사용법
Git 개념 및 사용법Git 개념 및 사용법
Git 개념 및 사용법Lee Yongmin
 
L3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load Balancing
L3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load BalancingL3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load Balancing
L3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load BalancingJan Schaumann
 
Stash 사용자 교육
Stash 사용자 교육Stash 사용자 교육
Stash 사용자 교육Byeongsu Kang
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
Slipp clojure-1212
Slipp clojure-1212Slipp clojure-1212
Slipp clojure-1212완수 양
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 
Open Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewOpen Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewMinsuk Lee
 
SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교seungdols
 
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5성일 한
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA경원 이
 
Scala로의 산책
Scala로의 산책Scala로의 산책
Scala로의 산책Youmi Bae
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
SOAP REST 이해
SOAP REST 이해SOAP REST 이해
SOAP REST 이해Jake Yoon
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 

Viewers also liked (20)

Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
무엇이 무엇이 닮았을까?- OpenStack과 Azure
무엇이 무엇이 닮았을까?- OpenStack과 Azure무엇이 무엇이 닮았을까?- OpenStack과 Azure
무엇이 무엇이 닮았을까?- OpenStack과 Azure
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerl
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of Work
 
Git 개념 및 사용법
Git 개념 및 사용법Git 개념 및 사용법
Git 개념 및 사용법
 
L3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load Balancing
L3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load BalancingL3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load Balancing
L3DSR - Overcoming Layer 2 Limitations of Direct Server Return Load Balancing
 
Stash 사용자 교육
Stash 사용자 교육Stash 사용자 교육
Stash 사용자 교육
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
Slipp clojure-1212
Slipp clojure-1212Slipp clojure-1212
Slipp clojure-1212
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
Open Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code reviewOpen Source 그리고 git과 github, code review
Open Source 그리고 git과 github, code review
 
SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교
 
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
Scala로의 산책
Scala로의 산책Scala로의 산책
Scala로의 산책
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
Slipp 발표 - GO
Slipp 발표 - GOSlipp 발표 - GO
Slipp 발표 - GO
 
IBM Bluemix
IBM BluemixIBM Bluemix
IBM Bluemix
 
SOAP REST 이해
SOAP REST 이해SOAP REST 이해
SOAP REST 이해
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 

Similar to Git의 개념과 사용

[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함Ji-Woong Choi
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randalyagurchoi
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating IntroductionJongwook Choi
 
Hadoop distributed file system rev3
Hadoop distributed file system rev3Hadoop distributed file system rev3
Hadoop distributed file system rev3Sung-jae Park
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1Kay Kim
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기Wooyoung Ko
 
[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
 
[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)NAVER D2
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템tcaesvk
 
리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 githubJungHoon Lee
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaosYunkyu Choi
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 SeongHyun Ahn
 
해커스 가이드 투 깃
해커스 가이드 투 깃해커스 가이드 투 깃
해커스 가이드 투 깃Jongdeok Kim
 
깃허브 시작하기
깃허브 시작하기깃허브 시작하기
깃허브 시작하기진태 이
 

Similar to Git의 개념과 사용 (20)

Git
Git Git
Git
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randal
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
Hadoop distributed file system rev3
Hadoop distributed file system rev3Hadoop distributed file system rev3
Hadoop distributed file system rev3
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기
 
Svn
SvnSvn
Svn
 
[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)
 
[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
 
HDFS Overview
HDFS OverviewHDFS Overview
HDFS Overview
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리
 
Gfs Kyu
Gfs KyuGfs Kyu
Gfs Kyu
 
해커스 가이드 투 깃
해커스 가이드 투 깃해커스 가이드 투 깃
해커스 가이드 투 깃
 
깃허브 시작하기
깃허브 시작하기깃허브 시작하기
깃허브 시작하기
 

Git의 개념과 사용

  • 2. 버전 관리 시스템이란? 일반적인 경우, 작업한 파일의 최종본만을 가지고 있게 되지만, 버전 관리 시스템 사용시 파일의 변경 이력도 보존 가능. (파일 복원 가능.) 저장소(레파지토리)라고 불리는 일종의 데이터베이스에 파일과 변경내역을 저장. 이전 버전(변경 전)의 파일 히스토리까지 보존하고 관리할 수 있어 여러가지 이점이 생김.
  • 3. 버전 관리 시스템 사용시 장점 소스 파일을 서버에 안전하게 보관. 팀끼리 소스 공유 및 협업이 편리. 작업하다 아니다 싶으면 이전 버전의 소스로 복원 가능. 특정 시점의 소스, 고객사별 소스를 별도로 관리하지 않아도 됨. (통합 관리 및 복원 가능) 변경 내역 확인 가능. (예: 특정 기간동안 소스의 수정된 부분들을 확인하여 버그 발 생 부분을 찾는데 용이)
  • 4. 버전관리 중앙집중식 버전 관리 (SVN) 분산 버전 관리 시스템 (Git)
  • 5. 로컬 저장소와 원격 저장소 각 개발자 컴퓨터에도 로컬 저장소가 있는 것이 차이! 로컬 저장소 원격 저장소
  • 6. 기본적으로는 로컬에서 작업 기본적으로는 로컬에서 (로컬저장소와) 작업을 한다고 생각하면 된다. 그리고 필요할 때만 (다른 개발자와 변경된 소스를 공유할 필요가 있을 때) 원격 저 장소와 동기화. 그래서 사용하게 되는 대부분의 명령어가 로컬 저장소를 대상으로 한 명령. 서버와 동기화를 위한 명령은 Push(로컬 저장소 => 원격 저장소), Pull (원격 저장소 => 로컬 저장소) 정도. (기존에 SVN을 사용해 봤다면 SVN의 서버 저장소가 Git의 로컬 저장소라고 생각 하면 편하다. 거기에 원격 저장소라는 단계가 하나 더 추가된 꼴.)
  • 7. 로컬 저장소를 두는 장점 인터넷이 안되는 상황 (출장 등)에서도 버전 관리가 가능. 주로 로컬 저장소에서 작업을 하므로 속도가 월등히 빠름. 일단 로컬 저장소를 대상으로 작업하기 때문에 비교적 마음 편하게 버전 관리가 가 능. 원격 저장소의 데이터가 소실되었을 때, 로컬 저장소를 이용하여 복원 가능. 전세계에 걸친 오픈소스 개발에 적합. (Git은 리눅스 커널 개발을 위해 리누스 토발 즈가 개발한 것.) 혼자서 버전 관리하기도 편함.
  • 8. 우리가 사용하는 Git 호스팅 서비스는? 비트버킷! (Bitbucket) https://bitbucket.org
  • 9. Git 클라이언트 SourceTree (윈도우즈, 맥) TortoiseGit (윈도우즈, 탐색기에 통합)
  • 11. 커밋과 커밋 식별자 변경사항을 로컬 저장소에 올리는 것도 커밋이라고 하고, 그 결과물인 해당 시점의 데이터도 커밋이라고 부름. 커밋을 식별하기 위해 SVN은 리비전 번호를 사용. (일련 번호) 예: 789 Git은 SHA-1 해시값 사용. (문자+숫자) 예: 24b9da6552252987aa493b52f8696cd6d3b00373 너무 길다? 앞부분만 적어도 가능.
  • 12. 최초로 원격 저장소 받아오기 (복제) 원격 저장소가 이미 구성되어 있다면, 최초에 한번 (그리고 로컬 저장소를 날린 경 우) 받아와야 한다. Clone 원격 저장소를 로컬 저장소로 복제해 오므로, 명령어 이름을 Clone 이라고 한다. 원격 저장소의 최신 상태를 가져오는 게 아니라, 기존의 히스토리까지 모두 복사해 오므로 복제이다!
  • 13. 워킹 디렉토리 / 스테이징 영역 / 로컬 저장소 워킹 디렉토리 : 개발자 실 제 디스크에 보이는 파일들 스테이징 영역 : 로컬 저장 소에 커밋할 대상이 되도록 추가한 파일들이 위치한 영 역 (논리 영역) 로컬 저장소 : 말그대로. (해 당 프로젝트의 .git 디렉토리)
  • 15. 수정한 파일을 로컬 저장소에 적용(커밋)하기
  • 16. 기존의 시스템(SVN 등)은 파 일이 변화되면 파일의 변경된 내용 부분만 저장 Git은 '스냅샷'이라고 해서 변 화된 파일은 통째로 저장 장점 : 속도가 빠름, 비교적 버 전/브랜치 이동 및 병합이 잘 됨 스냅샷
  • 17. Commit 시 유의할 점 가능하면 단일 작업 단위별로 커밋한다. (기능 한가지 추가, 버그 한가지 수정) (스테이징 기능을 이용하면 편리.) 커밋 메시지(커밋 로그)를 잘 작성한다. (나중에 가장 많이 보게 될 내용이므로)
  • 18. Push / Pull Push 내 로컬 저장소에 추가한 커밋들을 원격 저장소에 올린다. Pull 원격 저장소에 변경된 내용을 내 로컬 저장소로 받아온다. Push 하기 전에 원격 서버에 변경된 사항이 있으면 먼저 Pull 해와서 병합한 후, Push 하도록 강제되어 있다. (그래서 Push 하기 전에는 Pull을 먼저 하는 습관을 들이는 것 이 좋다.)
  • 19. 작업내용 되돌리기 (복원) 방금 한 커밋이 잘못 되었다면? 덮어서 커밋 가능 (amend 옵션을 준 커밋) (커밋 메시지 수정, 빠트린 파일 추가) 특정 커밋의 내용으로 이동하기 체크아웃! (워킹 디렉토리의 파일들이 해당 커밋으로 변경됨. 주로 조회용.) 특정 커밋의 내용으로 원복하기 리셋! (주로 최신 커밋으로만 리셋. 임시 작업 내용을 날릴때.) 위의 명령어는 모두 로컬 저장소를 대상으로 함.
  • 20. 태그 특정 커밋에 태그를 남김. (중요함을 나타내는 일종의 책갈피?) 주로 새 버전이 릴리즈 될 때마다 해당 커밋에 태그를 남김. 태그를 이용하여 해당 릴리즈 버전의 소스를 찾아 복원하기 편함. (다시 빌드, 수정) 태그명 예: v1.0
  • 21. 브랜치와 병합 #1 소스의 히스토리를 일종의 나무(트리)라고 본다면 갈래가 나눠져 나온 것을 가지(브랜치) 라고 함. 따로 브랜치를 생성하지 않으면 메인 브랜치만 존재. (기본 메인 브랜치명: master) 브랜치로 나누면 충돌없이 동시에 작업이 가능. 예) 메인 브랜치: 프로덕션 코드 / 브랜치 A: 기능 추가 / 브랜치 B: 버그 수정 / 브랜치 C: 특정 고객사 커스터마이징 브랜치로 나누다가 작업이 완료되면, 메인 브랜치에 합침. 이를 병합(Merge)라고 함. 브랜치를 따서 작업하고 병합하는 것을 반복하며 개발. Git은 브랜치를 적극적으로 사용할 것을 권장. 기존 시스템에 비해 브랜칭과 머지 잘됨.
  • 23. 체크아웃 로컬 저장소로부터 특정 시점의 커밋(소스 파일)을 끌어오는 개념이라고 이해하면 편함. 같은 브랜치 내의 특정 시점의 커밋을 체크아웃하면 해당 파일들이 워킹 디렉토리 에 복원됨. 다른 브랜치를 체크아웃하면 해당 브랜치의 파일들이 워킹 디렉토리에 복원됨. 그래서 과거 커밋의 소스 파일을 살펴보거나, 브랜치를 전환하여 작업할 때 사용. 기존의 버전 관리 시스템과 달리 Git은 물리적인 파일들이 순식간에 교체된다. (브랜치를 별도의 하위 디렉토리로 관리하는 방식이 아니다.)
  • 24. 충돌 (Conflict) 기본적으로는 Git 시스템이 알아서 변경된 부분들을 병합을 해주지만, 병합에 실패 하여 충돌(Conflict)가 나는 경우들이 생김. 저장소로부터 파일을 받아왔을 때, 내 워킹 디렉토리에 수정한 파일이 있고, 두 파 일의 같은 부분이 수정되어 있을 경우 발생. 뭔가 짜증나고 곤란한 상황. 같은 부분이 수정되었기 때문에 논리상 어쩔 수 없다. 알아서 해줄 방법이 없다. 수 동으로 해결. 알아서 하거나, 수정을 한 상대방과 논의하여 병합.
  • 25. 물론 버전 관리 시스템(Git)의 사용법을 익히고 적응하는 것도 쉬운 일은 아니지만, 어떤 규칙과 정책으로 소스와 버전을 관리해 나갈지가 중요하고도 어려운 문제. (특 히 브랜칭 정책.) 소프트웨어의 버전 관리를 어떻게 할 것인가가 버전 관리 시스템 운영과도 연관됨. 의미 있는 단위로 변경 이력을 남긴다는 측면을 유의하는 게 좋음. (커밋 단위를 좀 더 의미있게. 과거 커밋들을 날리는 작업은 지양.) 그럼에도, 일단 서버에 소스를 백업하고 팀과 공유한다 정도로 생각하고 시작해도 충분. 향후 관건