svn 을능숙하게다루던능력자들처음 git 을만나면대게이런표정이죠.

Similar documents
git CLI 로간단하게조작하기! by 윤선지

슬라이드 1

PowerPoint 프레젠테이션

리눅스기초

github_introduction.key

SourceTree 를이용한 Git 사용법 1

PowerPoint 프레젠테이션

PowerPoint Presentation

GIT/GITHUB 사용 1 Git & GitHub 튜토리얼 출처 : [Studio Rini ] Git 을보통어떻게사용하는지간략한 Flow 를보겠습니다. 1. 새프로젝트를생성, 프로젝트폴더에 g

슬라이드 1

슬라이드 1

슬라이드 1

Software Verification Team 오준 임국현 주영진 김슬기

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - 08_(Linux)_(Fundamental)_Version_Control_Systems

슬라이드 1

Windows Server 2012

슬라이드 1

<3836C8A35FB0F8C7D05FC6AEB7BBB5E55F F466C6F77B8A65FC8B0BFEBC7D15FC8BFB0FAC0FBC0CE5FBCD2BDBA5FC7FCBBF35FB0FCB8AE5F F332E687770>

Title Layout

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

슬라이드 1

<3833C8A35FB0F8C7D05FC6AEB7BBB5E55F F466C6F77B8A65FC8B0BFEBC7D15FC8BFB0FAC0FBC0CE5FBCD2BDBA5FC7FCBBF35FB0FCB8AE5F F322E687770>

목차 백업 계정 서비스 이용 안내...3 * 권장 백업 정책...3 * 넷하드(100G 백업) 계정 서버로 백업하는 2가지 방법...3 * 백업서버 이용시 주의사항...3 WINDOWS 서버 사용자를 위한 백업서비스 이용 방법 네트워크 드라이브에 접속하여

System Recovery 사용자 매뉴얼

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

파워포인트

<41736D6C6F D20B9AEBCADBEE7BDC42E687770>

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

PowerPoint Presentation

문서의 제목 나눔고딕B, 54pt

PowerPoint 프레젠테이션

Cloud Friendly System Architecture

슬라이드 1

PowerPoint 프레젠테이션

ISP and CodeVisionAVR C Compiler.hwp

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

저장소 (Repository) 의디렉토리배치 저장소에바로소스를넣어프로젝트를진행할수있으나, 버전관리시스템에서권 장하는디렉토리배치방법이있다. sample branches dav-mirror --- src --- doc +--- Makefile

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

Index

Microsoft Word - Armjtag_문서1.doc

750 1,500 35

RHEV 2.2 인증서 만료 확인 및 갱신

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

2007년 6월 고2 모의고사 국어,언어 문제.hwp


Install stm32cubemx and st-link utility

C스토어 사용자 매뉴얼

Microsoft Word - TortoiseSVN_Beginner_Guide.doc

PowerPoint 프레젠테이션

슬라이드 1

Secure Programming Lecture1 : Introduction

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Frequently Asked Question 버전 변경 날짜 변경 내용 v /07/22 최초 작성

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

Microsoft PowerPoint - chap01-C언어개요.pptx

서버설정 1. VLAN 설정 1.1 토폴로지를참고로 SW1 에 vlan 설정을한다. (vlan 이름을설정하고해당인터페이스에 vlan 이름과동일한코멘트를처리하시오.) 1.2 PC에토폴로지에부여된 IP를설정하고, 게이트웨이는네트워크의마지막주소를사용합니다. - 서버에는 DN

미친놈과 정상인

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가

SBR-100S User Manual

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

워드표준 가이드

Xcovery 사용설명서

*2008년1월호진짜

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

View Licenses and Services (customer)

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기

제 2 장 기본 사용법

PowerPoint 프레젠테이션

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

Salmosa_WebManual_KOR(B)

PowerPoint 프레젠테이션

메일서버등록제(SPF) 인증기능적용안내서 (HP-UX - postfix) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 HP-UX 11.11i postfix spf-filter 년 6 월

1

Google SVN 계정만들기 Site : 1. 사이트접속후프로젝트호스팅선택 2. 오픈소스프로젝트검색선택

제 1 절 복습 \usepackage{ g r a p h i c x }... \ i n c l u d e g r a p h i c s [ width =0.9\ textwidth ] { b e a r. j p g } (a) includegraphics 사용의일반적인유형

네이버블로그 :: 포스트내용 Print VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 /carrena/ VMware 에서 l

PowerPoint Template

ADP-2480

항목

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.


NTD36HD Manual

User Guide

DBMS & SQL Server Installation Database Laboratory

Tablespace On-Offline 테이블스페이스 온라인/오프라인

초보자를 위한 분산 캐시 활용 전략

Windows 8에서 BioStar 1 설치하기

Slide 1

VPN.hwp

문서의 제목 나눔고딕B, 54pt

Microsoft Word - release note-VRRP_Korean.doc

Introduction to Junit, Eclipse, Build Environment

Transcription:

svn 능력자를위한 git 개념가이드

svn 을능숙하게다루던능력자들처음 git 을만나면대게이런표정이죠.

하지만곧이렇게됩니다. http://ggamangi.tistory.com 블로그의 < 민찬 > 어린이입니다.

git 은 svn 과비슷해보이지만사실상당히다릅니다. 그래서막상덤벼보면아리송한게한두가지가아닙니다.

주위에서흔히볼수있는 git 가이드들은무척친절합니다. 하지만, svn 숙련자들에게는오히려혼란스럽습니다.

지금부터 svn 을기준으로 git 을살펴보겠습니다.

svn 은보통저장소가서버에있습니다. git 은저장소가내컴퓨터에있습니다. 응? here! 저장소 내컴퓨터 here! 내컴퓨터 저장소

그럼 git 은다른사람들과작업을할수없나요? 원격저장소를만들면됩니다. remote repository

원격저장소 ➁ 다른사람과공유할때원격저장소에푸쉬합니다. push 내컴퓨터 commit 로컬저장소 ➀ 내컴퓨터의저장소에열심히작업내용을커밋하고

svn 작업공간 저장소 git 작업공간 로컬저장소 원격저장소 이렇게저장소가분산되는구조를분산버전관리시스템 (DVCS) 라고합니다.

로컬저장소가따로있으면어떤장점이있을까요?

엄청나게빠릅니다. 인터넷을경유할필요가없기때문에훨씬빠릅니다. Commit git svn 4x Log git svn 325x git 공식홈페이지의벤치마크결과를참고하였습니다.

커밋에부담이없습니다. 내로컬저장소에서마음대로실험하고테스트하세요. 원격저장소 로컬저장소 작업공간

원격저장소와연결이끊겨도계속버전관리가가능합니다 svn 은서버에문제가생기면모든버전관리가중단됩니다. 원격저장소 복구! 로컬저장소 작업공간

원격저장소가폭파되어도로컬저장소로복원이가능합니다. 원격저장소와연결된모든로컬저장소는사본을보유합니다. 원격저장소 로컬저장소 파괴 복구! 저장소복사 작업공간

그런데 git 에는로컬저장소에커밋전, 하나의단계가더있습니다. 바로스테이지영역입니다. 인덱스 (index) 라고도부릅니다. 작업공간 스테이지영역 (Staging Area) 로컬저장소

svn 작업공간 저장소 git 작업공간 스테이지영역 로컬저장소 원격저장소 커밋할파일들을스테이지영역에추가합니다.

스테이지영역이어떤역할을하는지알아볼까요? ➀ 이런빌드목표를가지고작업을하고있습니다. 빌드목표! 로그인기능추가 A 버그수정 B 버그수정

스테이지영역이어떤역할을하는지알아볼까요? ➁ 다음과같이파일들이수정되었습니다. login.php menu.php head.php body.php tail.php style.css script.js 로그인기능추가 A 버그수정 B 버그수정

스테이지영역이어떤역할을하는지알아볼까요? ➂ 그런데로그인기능추가가다음빌드로미루어졌습니다. svn 이라면보통어떻게할까요? login.php menu.php head.php body.php tail.php style.css script.js 로그인기능추가 A 버그수정 B 버그수정 ❶ 수정된 login.php 를어딘가로백업 ❷ svn revert 를이용해원래상태로복원 ❸ 수정내역전체를커밋 ❹ 백업해두었던 login.php 를다시복구 변경된파일들은무조건커밋대상이되기때문에생기는문제입니다.

스테이지영역이어떤역할을하는지알아볼까요? ➃ 그럼 git 은어떻게하나요? login.php menu.php head.php body.php tail.php style.css script.js 로그인기능추가 A 버그수정 B 버그수정 ❶ 커밋할파일들만 staging area 에추가 ❷ 로컬저장소로커밋

귀찮을수있습니다. 특별히파일들을구분할필요가없을때에는 -a 옵션으로스테이치추가와커밋을동시에할수있습니다. git commit -a

커밋을마쳤으면, 이제다른사람들에게작업물을공유합니다. 원격저장소에올리는명령어는 push 입니다. git push

svn 내컴퓨터 svn commit 저장소 git 내컴퓨터 스테이지영역 로컬저장소 원격저장소 git add git commit git push

내작업을올리는데오류가발생했어요. 다른사람들이작업한내용을먼저받아야한대요. 원격저장소로부터내려받기 : fetch 내려받은데이터를병합 : merge 하지만이둘을함께처리하는명령은 pull git pull

svn 내컴퓨터 svn update 저장소 git 내컴퓨터 로컬저장소 git fetch 원격저장소 git merge 내컴퓨터 git pull 원격저장소

지금까지알아본 svn 과의차이점은? ➀ 로컬저장소가존재한다. ➁ 커밋이전에스테이지영역에추가하는과정이있다. ➂ 가장중요한차이점이자 git 만의특징이남았습니다!

스냅샷 snapshot git 은각각의버전을스냅샷으로저장합니다.

svn 은파일의변화 ( 차이점 ) 를저장합니다. 시간의흐름 버전 1 버전 2 버전 3 버전 4 버전 5 A 파일 1 2 B 파일 1 2 C 파일 1 2 3

git 은그순간의스냅샷으로저장합니다. 시간의흐름 버전 1 버전 2 버전 3 버전 4 버전 5 A A1 A1 A2 A2 B B B B1 B2 C C1 C2 C2 C3

svn 에서버전 5 의파일들을가져오겠습니다. 기초가되는파일과함께모든변경내역을서버로부터내려받습니다. 시간의흐름 버전 1 버전 2 버전 3 버전 4 버전 5 A 파일 1 2 B 파일 1 2 C 파일 1 2 3

git 에서버전 5 의파일들을가져오겠습니다. 가장가까운스냅샷들만으로특정버전을빠르게만들어낼수있습니다. 게다가네트워크를거치지않습니다. 시간의흐름 버전 1 버전 2 버전 3 버전 4 버전 5 A A1 A1 A2 A2 B B B B1 B2 C C1 C2 C2 C3

지금까지스냅샷에대해서알아보았습니다. 그런데왜이렇게열심히설명한걸까요? 바로 git 의최대장점인브랜치 branch 를소개하기위해서입니다. 요게바로스냅샷덕분에구현될수있었답니다.

svn 의브랜치 root trunk sources svn 은간단히말해디렉토리구조입니다. bin images 서버는단지변경사항만저장하며최소한의자료구조를유지하지만, 작업자가작업을위해브랜치를내려받으면그변경내역들을순차적용하여실제파일들을만들어냅니다. branch1 branch2 branch3 브랜치를만들면, 전체파일을네트워크를통해통째로내려받기때문에느리고부담스럽습니다.

git 의브랜치 svn 의 trunk 가 git 에서는 master master c0 c1 c2 c4 c3 branch c5 git 은서버에그런논리적디렉토리구조를만들지않습니다. 다만, 연속된스냅샷이순차적으로이어지다가가지를치면서브랜치가만들어집니다.

git 의브랜치 작업자는작업중에 branch 와 master 를자유롭게이동할수있습니다. checkout master c0 c1 c2 c4 c3 c5 checkout branch checkout 이 svn 에서는내려받는명령이지만, git 에서는브랜치를선택하는기능입니다.

svn 과 git 의브랜치가어떻게다른지정리해볼게요. svn git 만들기 즉시생성 즉시생성 내려받기 전체디렉토리구조를내려받음 필요없음 브랜치전환 직접디렉토리를이동 작업파일들이실시간변경됨 병합 위치와리비전을명시, 복잡함 빠르고간편함

git 의병합 merge branch HEAD c0 c1 c2 c4 c6 c3 c5 3-way merge : 각브랜치와공통조상하나를이용하여병합 svn 의 merge 가위치와병합할리비전을확인하여입력하는등의절차가필요했다면, git 의 merge 는브랜치이름만으로모든것들을자동으로해결합니다.

git 은수많은브랜치가동시에돌아가는것을장려합니다. svn 이었다면상상도못할일이었겠죠? ➀ 출시를위한프로덕션용브랜치를만듭니다. ➁ 기능추가혹은버그수정을위해그때그때브랜치를만듭니다. ➂ 아이디어를실험해보기위해브랜치를만듭니다. 여러커밋을거친 branch 를 merge 하는작업을 merge commit 이라고표현하기도합니다.

git 의브랜치관련명령어는다음과같습니다 : 브랜치만들기 git branch <name> git checkout <name> git branch -b <name> 두명령을한꺼번에수행하는명령 브랜치지우기 브랜치병합 git branch -d <name> git checkout master git merge branch 브랜치목록 git branch git branch --no-merged git branch --merged branch 가자주생성, 소멸되므로현재존재하는브랜치중어떤것들이 merge 가되었는지, 안되었는지를구분할수있어야합니다.

merge 중에충돌은언제나일어날수있습니다. trunk login.php menu.php head.php body.php tail.php style.css script.js branch login.php menu.php head.php body.php tail.php style.css script.js

충돌에대한처리는 svn 과동일합니다. <<<<<<< HEAD:login.php <div id='footer'>contact : email.support@github.com</div> ======= <div id='footer'> please contact us at support@github.com </div> >>>>>>> branch:login.php master 의 login.php 영역 branch 의 login.php 영역 ➀ master와 branch 영역중하나를선택 ➁ 혹은양쪽을참고하여새로작성 ➂ <<<, >>>, === 구분자를삭제 ➃ 변경내역을 add 후, commit git mergetool 명령을사용하면충돌을쉽게해결하기위한 merge 도구를사용가능합니다.

리베이스 rebase rebase 는 merge 와동일하게하나의브랜치를다른브랜치로병합하는기능을합니다. 단, 차이점은? 왜쓰는거에요? 두브랜치의결과를병합하는 merge 와달리, rebase 는한브랜치에서이루어진작업히스토리를다른브랜치에차례대로적용시킵니다. 둘의결과물은완전히동일하지만, rebase 는병합히스토리를더욱깔끔하게남겨줍니다. 공동작업에서깔끔한히스토리를계속유지해주고싶다면 rebase 를적극적으로사용하는것이좋습니다.

리베이스rebase merge와 rebase를비교합니다. master b2 master c1 c3 c4 b2 c1 c3 c4 c9 c10 c11 c2 c5 c6 merge c2 c5 c6 b1 c7 c8 b1 c7 c8 b3 rebase b3 b1 b2 b3 master c1 c3 c4 c2 c9 c10 c5 c6 c7 c8

태그 tag branch 처럼 tag 역시자체명령어를지원하고있습니다. 태그만들기 git tag <name> git tag -a <name> -a 를붙이면, 작업자, 설명등을추가로저장합니다. 태그지우기 태그목록 git tag -d <name> git tag

지금까지 git 만의특징들을알아보았습니다. 정리하면, ➀ 로컬저장소와원격저장소의분리분산처리, 안전한데이터, 빠른처리속도 ➁ 스테이지영역의존재커밋대상의분리 ➂ 스냅샷을이용한버전관리빠르고편리한브랜치 & 병합기능 이어서알아두어야할 git 의나머지기능들을살펴보겠습니다...

git 으로처음작업을시작합니다. git init // 내컴퓨터에새로빈로컬저장소를만들고, git remote add <repository> // 이로컬저장소를원격저장소에연결한후, git pull // 원격저장소로부터데이터를내려받습니다. 이방식을이용하면로컬저장소와원격저장소를수동으로연결할수있습니다. 하지만조금번거롭죠?

처음시작하는이런방법도있습니다. 로컬저장소는원격저장소와쌍둥이입니다. git clone <repository> // 한번의명령으로원격저장소로부터데이터를내려받습니다. ex) git clone /local/repository/path ex) git clone user@hostname:/remote/repository/path svn checkout 과비슷하죠?

이번에는실수했을때되돌리는방법입니다. 의외로많이사용하는기능이죠? svn 은절차가간단한반면, git 은더많은단계로인해좀더복잡합니다. git checkout -- git reset HEAD git fetch origin git reset --hard origin/master // 수정했지만아직스테이지에추가하지않은파일을되돌릴때, // 수정했고스테이지에추가한파일을다시스테이지에서제거할때, // 수정했고로컬저장소에 commit 한파일을되돌릴때,

모르면아쉬운 git 의특징들 전해드리는참고사이트에서더욱자세하게살펴보실수있습니다. ➀ 작업중브랜치를변경해야하는데커밋하기애매할때, 간단히저장해둘수있습니다. stashing 이라고해요! ➁ 커밋의순서를변경하거나커밋메시지심지어는커밋한파일도변경할수있습니다. ➂ 로그를자기입맛대로포맷팅해서볼수있습니다. ➃ 이전커밋에추가할수있습니다.

만약이렇다면 git 이필요없어요. ➀ 브랜치나태그기능은사용하지않아요. ➁ 관리하는파일들의규모가작아서오래전버전에접근하는데불편하지않아요. ➂ 지금까지 svn 서버가문제가되어곤란을겪은적이없어요. ➃ svn이느리다는생각은한번도해본적이없어요.

하지만, 조금이라도 svn 이의심된다면, 조금이라도 git 가기대된다면... 여러분의프로젝트에을시도해보시기를권해드립니다.

참조사이트일람 Git git - 간편안내서 Pro Git 서적번역 Git: Rebase 는언제어떻게해야할까?