Git의 개념과 사용

26
Git 의 의의의 의의 의의의 2016.1.12
  • Upload

    -
  • Category

    Software

  • view

    2.687
  • download

    1

Transcript of Git의 개념과 사용

Page 1: Git의 개념과 사용

Git 의개념과사용 홍환민

2016.1.12

Page 2: Git의 개념과 사용

버전관리시스템이란 ?

일반적인경우 , 작업한파일의최종본만을가지고있게되지만 , 버전관리시스템 사용시파일의변경이력도보존가능 . ( 파일복원가능 .)

저장소 (레파지토리 ) 라고불리는일종의데이터베이스에파일과변경내역을저장 .

이전버전 ( 변경전 ) 의파일히스토리까지보존하고관리할수있어여러가지 이점이생김 .

Page 3: Git의 개념과 사용

버전관리시스템사용시장점

소스파일을서버에안전하게보관 .

팀끼리소스공유및협업이편리 .

작업하다아니다싶으면이전버전의소스로복원가능 .

특정시점의소스 , 고객사별소스를별도로관리하지않아도됨 . ( 통합관리및 복원가능 )

변경내역확인가능 . (예 : 특정기간동안소스의수정된부분들을확인하여버그 발생부분을찾는데용이 )

Page 4: Git의 개념과 사용

버전관리

중앙집중식버전관리 (SVN) 분산버전관리시스템 (Git)

Page 5: Git의 개념과 사용

로컬저장소와원격저장소 각개발자컴퓨터에도로컬저장소가

있는것이차이 !

로컬저장소

원격저장소

Page 6: Git의 개념과 사용

기본적으로는로컬에서작업

기본적으로는로컬에서 (로컬저장소와 ) 작업을한다고생각하면된다 .

그리고필요할때만 ( 다른개발자와변경된소스를공유할필요가있을때 ) 원격 저장소와동기화 .

그래서사용하게되는대부분의명령어가로컬저장소를대상으로한명령 .

서버와동기화를위한명령은 Push( 로컬저장소 => 원격저장소 ), Pull ( 원격 저장소 => 로컬저장소 ) 정도 .

( 기존에 SVN 을사용해봤다면 SVN 의서버저장소가 Git 의로컬저장소라고 생각하면편하다 . 거기에원격저장소라는단계가하나더추가된꼴 .)

Page 7: Git의 개념과 사용

로컬저장소를두는장점

인터넷이안되는상황 ( 출장등 ) 에서도버전관리가가능 .

주로로컬저장소에서작업을하므로속도가월등히빠름 .

일단로컬저장소를대상으로작업하기때문에비교적마음편하게버전관리가가능 .

원격저장소의데이터가소실되었을때 , 로컬저장소를이용하여복원가능 .

전세계에걸친오픈소스개발에적합 . (Git 은리눅스커널개발을위해리누스 토발즈가개발한것 .)

혼자서버전관리하기도편함 .

Page 8: Git의 개념과 사용

우리가사용하는 Git 호스팅서비스는 ?

비트버킷 !

(Bitbucket)https://bitbucket.org

Page 9: Git의 개념과 사용

Git 클라이언트

SourceTree (윈도우즈 , 맥 )

TortoiseGit (윈도우즈 , 탐색기에통합 )

Page 10: Git의 개념과 사용

커밋히스토리

커밋

Page 11: Git의 개념과 사용

커밋과커밋식별자

변경사항을로컬저장소에올리는것도커밋이라고하고 , 그결과물인해당 시점의데이터도커밋이라고부름 .

커밋을식별하기위해 SVN 은리비전번호를사용 . ( 일련번호 )

예 : 789

Git 은 SHA-1 해시값사용 . (문자 +숫자 )

예 : 24b9da6552252987aa493b52f8696cd6d3b00373

너무길다 ? 앞부분만적어도가능 .

Page 12: Git의 개념과 사용

최초로원격저장소받아오기 (복제 )

원격저장소가이미구성되어있다면 , 최초에한번 ( 그리고로컬저장소를날린경우 ) 받아와야한다 .

Clone 원격저장소를로컬저장소로복제해오므로 , 명령어이름을 Clone 이라고한다 .

원격저장소의최신상태를가져오는게아니라 , 기존의히스토리까지모두 복사해오므로복제이다 !

Page 13: Git의 개념과 사용

워킹디렉토리 / 스테이징영역 / 로컬저장소

워킹디렉토리 : 개발자 실제디스크에보이는

파일들

스테이징영역 : 로컬 저장소에커밋할대상이

되도록추가한파일들이 위치한영역 ( 논리영역 )

로컬저장소 : 말그대로 . ( 해당프로젝트의 .git 디렉토리 )

Page 14: Git의 개념과 사용

파일의상태

Page 15: Git의 개념과 사용

수정한파일을로컬저장소에적용 (커밋 )하기

Page 16: Git의 개념과 사용

기존의시스템 (SVN 등 ) 은 파일이변화되면파일의 변경된내용부분만저장

Git 은 '스냅샷 ' 이라고해서 변화된파일은통째로저장

장점 : 속도가빠름 , 비교적버전 / 브랜치이동및병합이잘됨

스냅샷

Page 17: Git의 개념과 사용

Commit 시유의할점

가능하면단일작업단위별로커밋한다 . ( 기능한가지추가 , 버그한가지수정 )

( 스테이징기능을이용하면편리 .)

커밋메시지 ( 커밋로그 ) 를잘작성한다 . ( 나중에가장많이보게될내용이므로 )

Page 18: Git의 개념과 사용

Push / PullPush

내로컬저장소에추가한커밋들을원격저장소에올린다 .

Pull

원격저장소에변경된내용을내로컬저장소로받아온다 .

Push 하기전에원격서버에변경된사항이있으면먼저 Pull 해와서병합한후 , Push 하도록강제되어있다 . ( 그래서 Push 하기전에는 Pull 을먼저하는습관을

들이는것이좋다 .)

Page 19: Git의 개념과 사용

작업내용되돌리기 (복원 )

방금한커밋이잘못되었다면 ?

덮어서커밋가능 (amend 옵션을준커밋 ) ( 커밋메시지수정 , 빠트린파일추가 )

특정커밋의내용으로이동하기

체크아웃 ! ( 워킹디렉토리의파일들이해당커밋으로변경됨 . 주로조회용 .)

특정커밋의내용으로원복하기

리셋 ! ( 주로최신커밋으로만리셋 . 임시작업내용을날릴때 .)

위의명령어는모두로컬저장소를대상으로함 .

Page 20: Git의 개념과 사용

태그

특정커밋에태그를남김 . ( 중요함을나타내는일종의책갈피 ?)

주로새버전이릴리즈될때마다해당커밋에태그를남김 .

태그를이용하여해당릴리즈버전의소스를찾아복원하기편함 . ( 다시빌드 , 수정 )

태그명예 : v1.0

Page 21: Git의 개념과 사용

브랜치와병합 #1 소스의히스토리를일종의나무 (트리 ) 라고본다면갈래가나눠져나온것을가지 (

브랜치 ) 라고함 .

따로브랜치를생성하지않으면메인브랜치만존재 . ( 기본메인브랜치명 : master)

브랜치로나누면충돌없이동시에작업이가능 .

예 ) 메인브랜치 : 프로덕션코드 / 브랜치 A: 기능추가 / 브랜치 B: 버그수정 / 브랜치 C: 특정고객사커스터마이징

브랜치로나누다가작업이완료되면 , 메인브랜치에합침 . 이를병합 (Merge) 라고함 .

브랜치를따서작업하고병합하는것을반복하며개발 .

Git 은브랜치를적극적으로사용할것을권장 . 기존시스템에비해브랜칭과머지잘됨 .

Page 22: Git의 개념과 사용

브랜치와병합 #2

Page 23: Git의 개념과 사용

체크아웃

로컬저장소로부터특정시점의커밋 ( 소스파일 ) 을끌어오는개념이라고 이해하면편함 .

같은브랜치내의특정시점의커밋을체크아웃하면해당파일들이워킹 디렉토리에복원됨 .

다른브랜치를체크아웃하면해당브랜치의파일들이워킹디렉토리에복원됨 .

그래서과거커밋의소스파일을살펴보거나 , 브랜치를전환하여작업할때사용 .

기존의버전관리시스템과달리 Git 은물리적인파일들이순식간에교체된다 .

( 브랜치를별도의하위디렉토리로관리하는방식이아니다 .)

Page 24: Git의 개념과 사용

충돌 (Conflict)

기본적으로는 Git 시스템이알아서변경된부분들을병합을해주지만 , 병합에 실패하여충돌 (Conflict) 가나는경우들이생김 .

저장소로부터파일을받아왔을때 , 내워킹디렉토리에수정한파일이있고 , 두 파일의같은부분이수정되어있을경우발생 .

뭔가짜증나고곤란한상황 .

같은부분이수정되었기때문에논리상어쩔수없다 . 알아서해줄방법이없다 . 수동으로해결 .

알아서하거나 , 수정을한상대방과논의하여병합 .

Page 25: Git의 개념과 사용

물론버전관리시스템 (Git) 의사용법을익히고적응하는것도쉬운일은아니지만 ,

어떤규칙과정책으로소스와버전을관리해나갈지가중요하고도어려운문제 . ( 특히브랜칭정책 .)

소프트웨어의버전관리를어떻게할것인가가버전관리시스템운영과도연관됨 .

의미있는단위로변경이력을남긴다는측면을유의하는게좋음 . ( 커밋단위를 좀더의미있게 . 과거커밋들을날리는작업은지양 .)

그럼에도 , 일단서버에소스를백업하고팀과공유한다정도로생각하고시작해도충분 .

향후관건

Page 26: Git의 개념과 사용

시연Q/A