171
GitHub 실습 v.1.4 신승엽 / 유니원사업팀 2016년 1월 18일

GitHub 실습 교육

  • Upload
    -

  • View
    10.885

  • Download
    3

Embed Size (px)

Citation preview

Page 1: GitHub 실습 교육

GitHub 실습

v.1.4

신승엽 /�유니원사업팀

2016년1월18일

Page 2: GitHub 실습 교육

2 /�GitHub 실습

준비

SourceTree

- http://www.sourcetreeapp.com/

실습파일

- http://flysky.kr/github-example.zip

Page 3: GitHub 실습 교육

3 /�GitHub 실습

규칙

직접실습합니다.

슬라이드의내용에집중합니다.

Page 4: GitHub 실습 교육

GitHub기본설정

Page 5: GitHub 실습 교육

5 /�GitHub 실습

https://github.com

GitHub

Page 6: GitHub 실습 교육

6 /�GitHub 실습

- 원하는아이디와비밀번호

그리고이메일을입력한후

회원가입합니다.

회원가입

Page 7: GitHub 실습 교육

7 /�GitHub 실습

- Free를선택하고

계속진행

회원가입

Page 8: GitHub 실습 교육

8 /�GitHub 실습

가입완료!

회원가입

Page 9: GitHub 실습 교육

9 /�GitHub 실습

GitHub에가입하세요.

- 초기화면에서아이디,이메일,비밀번호입력

- 플랜은Free로

- 꼭! 이메일입력후이메일인증을받으세요.

(받지않으면계정잠김)

회원가입

Page 10: GitHub 실습 교육

GitHub과 SourceTree를이용한Git 기초사용법

Page 11: GitHub 실습 교육

11 /�GitHub 실습

오른쪽상단의플러스아이콘을누른후

New�repository를선택하여저장소를

생성할수있습니다.

저장소생성

Page 12: GitHub 실습 교육

12 /�GitHub 실습

저장소이름을작성합니다

체크합니다

저장소생성

Page 13: GitHub 실습 교육

13 /�GitHub 실습

저장소생성

Page 14: GitHub 실습 교육

14 /�GitHub 실습

저장소생성

calculator�라는이름의저장소를하나생성하세요.

- 오른쪽상단의+ 표시에서New�Repository

- 저장소이름을입력하고README�생성에체크

Page 15: GitHub 실습 교육

15 /�GitHub 실습

저장소복제

저장소페이지의클립보드아이콘을클

릭해서주소를복사합니다.

Page 16: GitHub 실습 교육

16 /�GitHub 실습

저장소복제

SourceTree의도구모음에서

Clone을클릭합니다.

Windows

MacOS X

New�Repository에서

Clone�From�URL을 클릭합니다.

Page 17: GitHub 실습 교육

17 /�GitHub 실습

저장소복제

저장소주소입력후탭키Git 저장소라는메시지확인

Windows

MacOS X

저장소주소입력후탭키Git 저장소라는메시지확인

Page 18: GitHub 실습 교육

18 /�GitHub 실습

저장소복제

저장소가복제된것을확인할수있습니다.

Windows

MacOS X

Page 19: GitHub 실습 교육

19 /�GitHub 실습

저장소복제

calculator�저장소를로컬로복제하세요.

- GitHub에서저장소주소복사

- SourceTree에서저장소복제

Page 20: GitHub 실습 교육

20 /�GitHub 실습

사용자정보설정

Windows는[Tools]�- [Options]에서

Default�user�information을설정합니다.

이곳에서설정하면별도로설정하지않은

모든저장소에이설정이사용됩니다.

Page 21: GitHub 실습 교육

21 /�GitHub 실습

사용자정보설정

[Repository]�- [Repository�Settings...]�- [Advanced]�에서

Use�global�user�settings에체크를풀고설정하면

해당저장소에만반영됩니다.

Page 22: GitHub 실습 교육

22 /�GitHub 실습

사용자정보설정

Mac에서는UI를 통해이름을한글로설정하면

Mac 이외의OS에서는이렇게깨져보이게됩니다.

Page 23: GitHub 실습 교육

23 /�GitHub 실습

사용자정보설정

$�git config --global�user.name�신승엽/협업시스템개발팀

$�git config --global�user.email [email protected]

Mac에서사용자정보를설정할때는

터미널에서아래명령을사용합니다.

생략하면현재저장소에만적용

Page 24: GitHub 실습 교육

24 /�GitHub 실습

사용자정보설정

사용자정보를설정하세요.

- Windows:�환경설정의Default�user�information수정

- Mac�OS�X:�터미널을통해명령어로수정

Page 25: GitHub 실습 교육

25 /�GitHub 실습

사용자정보설정

Mac에서명령어를통해서사용자이름을변경해도설정UI를한

번들어가면다시되돌아가는문제

https://github.com/flyskyko/git-hooks

Page 26: GitHub 실습 교육

26 /�GitHub 실습

GitFlow�설정

도구모음에서Git Flow를클릭합니다.

기본값그대로 OK를

클릭합니다.

Page 27: GitHub 실습 교육

27 /�GitHub 실습

GitFlow�설정

develop�브랜치가생성되고체크아웃된것을

확인할수있습니다.이제푸시합니다.

Page 28: GitHub 실습 교육

28 /�GitHub 실습

GitFlow�설정

도구모음에서 Push를 클릭합니다.

develop에체크한후OK를 클릭합니다.

Page 29: GitHub 실습 교육

29 /�GitHub 실습

GitFlow�설정

아이디와 비밀번호를

물어보면 GitHub 아이디와

비밀번호를 입력합니다.

Page 30: GitHub 실습 교육

30 /�GitHub 실습

GitFlow�설정

GitHub의 저장소 페이지로 이동

한 후 Settings를 클릭합니다.

Default�branch를 develop으로

선택합니다.

Page 31: GitHub 실습 교육

31 /�GitHub 실습

GitFlow�설정

Git Flow�설정을하고develop을기본브랜치로설정하세요.

- SourceTree의Git Flow�버튼을이용,초기설정

- develop�브랜치푸시

- GitHub설정페이지에서develop을기본브랜치로

Page 32: GitHub 실습 교육

32 /�GitHub 실습

파일수정과상태변경

저장소가복제된폴더로이동하여

README.md파일을수정해봅시다.

Windows

MacOS X

Page 33: GitHub 실습 교육

33 /�GitHub 실습

파일수정과상태변경

파일내용을변경하였습니다.

Page 34: GitHub 실습 교육

34 /�GitHub 실습

파일수정과상태변경

SourceTree의Working�Copy항목을보면

README.md파일이 Unstaged files에추가되었고

오른쪽에서는Diff를확인할수있습니다.

Page 35: GitHub 실습 교육

35 /�GitHub 실습

파일수정과상태변경

Unstaged files에있는 README.md파일을체크하면

Staged�files로추가됩니다.

이제커밋을위한준비가완료되었습니다.

Page 36: GitHub 실습 교육

36 /�GitHub 실습

파일수정과상태변경

그런데아차! '기술교육'을잊었네요.

파일을다시수정하였습니다.

Page 37: GitHub 실습 교육

37 /�GitHub 실습

파일수정과상태변경

README.md가Unstaged/Staged�files양쪽에모두있습니다.

Page 38: GitHub 실습 교육

38 /�GitHub 실습

파일수정과상태변경

Staged�file을수정하면 Staged�상태에서수정된 Unstaged상

태가됩니다.

커밋을위해서는다시체크하여 Staged�상태로변경하여야합

니다.

Page 39: GitHub 실습 교육

39 /�GitHub 실습

파일수정과상태변경

Page 40: GitHub 실습 교육

40 /�GitHub 실습

파일수정과상태변경

README.md파일을수정하여커밋준비를하세요.

-한번수정한후 Unstage상태가되는것을 확인하세요.

- Stage�상태로만드세요.

-다시수정하여 Stage/Unstage상태의차이를확인하세요.

-최종적으로 Stage�상태로만들어커밋준비를하세요.

Page 41: GitHub 실습 교육

41 /�GitHub 실습

Commit

Page 42: GitHub 실습 교육

42 /�GitHub 실습

Commit

develop브랜치에커밋이추가된것을확인할수있습니다.

Page 43: GitHub 실습 교육

43 /�GitHub 실습

Commit

develop브랜치에한번더 커밋을해보았습니다.

Git은원격 저장소와연결되어있지않더라도

로컬에서 몇번이고커밋을추가할수 있습니다.

이렇게로컬에 추가된커밋은푸시를통해원격저장소에

반영할수 있습니다.

Page 44: GitHub 실습 교육

44 /�GitHub 실습

Commit

Working�Copy의변경사항을커밋하세요.

-두번이상커밋해보시기바랍니다.

Page 45: GitHub 실습 교육

45 /�GitHub 실습

Push

도구모음의 Push를클릭합니다.

푸시할브랜치를

선택한 후 OK를

클릭합니다.

Page 46: GitHub 실습 교육

46 /�GitHub 실습

Push

GitHub의저장소페이지를새로고침해보면

우리가작성한 커밋이반영된것을확인할수있습니다.

Page 47: GitHub 실습 교육

47 /�GitHub 실습

Push

로컬의커밋을원격저장소로푸시하세요.

Page 48: GitHub 실습 교육

GitHub을이용한프로젝트관리

Page 49: GitHub 실습 교육

49 /�GitHub 실습

개요

각팀에서하나의저장소를만들고그곳에서

계산기 ver.�1.0을릴리즈하는과정을따라해보겠습니다.

조장을결정해주세요.

Page 50: GitHub 실습 교육

50 /�GitHub 실습

새로운규칙

직접실습합니다.

슬라이드의내용에집중합니다.

조장이행동하고조원이지켜봅니다.

조원이행동하고조장이지켜봅니다.

Page 51: GitHub 실습 교육

51 /�GitHub 실습

협업자추가

저장소는 앞서생성한조장의저장소를

사용하도록 하겠습니다.

저장소페이지의상단 Settings를클릭

왼쪽메뉴에서 Collaborators를클릭

Page 52: GitHub 실습 교육

52 /�GitHub 실습

협업자추가

조원을검색하여추가해줍니다.

(아이디로검색)

Page 53: GitHub 실습 교육

53 /�GitHub 실습

협업자추가

Page 54: GitHub 실습 교육

54 /�GitHub 실습

협업자추가

조원을협업자로추가합니다.

- Settings�- Collaborator

-아이디로검색후추가

Page 55: GitHub 실습 교육

55 /�GitHub 실습

저장소복제

각조원은조장의저장소를

복제한후 Git Flow�설정까지

완료합니다.

이때 Git Flow�초기설정은

develop과master�브랜치가

모두로컬에있어야가능합니다.

Remotes ­ origin의master를체크아웃받습니다.

(develop은기본브랜치이기때문에복제시 체크아웃됨)

Page 56: GitHub 실습 교육

56 /�GitHub 실습

마일스톤설정

저장소페이지의상단에서 Issues�클릭

상단탭에서Milestones�클릭

오른쪽상단의 New�milestone�클릭

Page 57: GitHub 실습 교육

57 /�GitHub 실습

마일스톤설정

이름

설명

기한

Page 58: GitHub 실습 교육

58 /�GitHub 실습

마일스톤설정

마일스톤 진행상황을 확인할수있습니다.

Page 59: GitHub 실습 교육

59 /�GitHub 실습

마일스톤설정

계산기 ver.1.0마일스톤을추가합니다.

Page 60: GitHub 실습 교육

60 /�GitHub 실습

라벨설정

저장소 페이지의상단에서 Issues�클릭

탭에서 Labels�클릭

Page 61: GitHub 실습 교육

61 /�GitHub 실습

라벨설정

Page 62: GitHub 실습 교육

62 /�GitHub 실습

라벨설정

New�label을클릭

라벨이름과색상을지정가능합니다.

Page 63: GitHub 실습 교육

63 /�GitHub 실습

라벨설정

Page 64: GitHub 실습 교육

64 /�GitHub 실습

라벨설정

라벨의구성을자유롭게변경하세요.

Page 65: GitHub 실습 교육

65 /�GitHub 실습

이슈생성

저장소페이지의상단에서 Issues�클릭

오른쪽상단의 New�issue�클릭

Page 66: GitHub 실습 교육

66 /�GitHub 실습

이슈생성

Page 67: GitHub 실습 교육

67 /�GitHub 실습

이슈생성

Page 68: GitHub 실습 교육

68 /�GitHub 실습

이슈생성

Page 69: GitHub 실습 교육

69 /�GitHub 실습

이슈생성

Page 70: GitHub 실습 교육

70 /�GitHub 실습

이슈생성

Page 71: GitHub 실습 교육

71 /�GitHub 실습

이슈생성

Page 72: GitHub 실습 교육

72 /�GitHub 실습

이슈논의

하단의댓글입력창을통해댓글을남길수있습니다.

Page 73: GitHub 실습 교육

73 /�GitHub 실습

이슈논의

Page 74: GitHub 실습 교육

74 /�GitHub 실습

이슈논의

Page 75: GitHub 실습 교육

75 /�GitHub 실습

이슈

앞장과같이이슈를등록하고댓글을통해의견을나누어봅니

다.

-이슈에담당자,라벨,마일스톤등을지정해보세요.

-댓글을통해의견을교환하세요.

Page 76: GitHub 실습 교육

76 /�GitHub 실습

기능개발

#1스켈레톤작성 이슈를개발해봅시다.

#1�이슈담당자는

이슈의라벨을적절하게변경합니다.

Page 77: GitHub 실습 교육

77 /�GitHub 실습

기능개발

도구모음에서Git Flow를클릭합니다.

Start�New�Feature를클릭합니다.

Page 78: GitHub 실습 교육

78 /�GitHub 실습

기능개발

Feature�Name은

이슈번호와

간략한설명으로

정합니다.

Page 79: GitHub 실습 교육

79 /�GitHub 실습

기능개발

feature/iss1-create-skeleton�브랜치가

생성되고 checkout된것을

확인할수있습니다.

Page 80: GitHub 실습 교육

80 /�GitHub 실습

기능개발

main.c를생성합니다.

Page 81: GitHub 실습 교육

81 /�GitHub 실습

기능개발

'fixed�#1'을포함하여커밋로그를작성하고 Commit합니다.

Page 82: GitHub 실습 교육

82 /�GitHub 실습

기능개발

푸시할브랜치를

선택한후

푸시합니다.

Page 83: GitHub 실습 교육

83 /�GitHub 실습

기능개발

GitHub의#1�이슈 페이지를확인하면

b2ade71�커밋이 #1�이슈와연결된것을

확인할수있습니다.

Page 84: GitHub 실습 교육

84 /�GitHub 실습

기능개발

fixed�라고적어주었기때문에 b2ade71�커밋이

기본브랜치인 develop�브랜치와머지될때

이슈가자동으로닫힙니다.

Page 85: GitHub 실습 교육

85 /�GitHub 실습

기능개발

#1�이슈를해결하세요.

- Git Flow�버튼을통해새 Feature를시작합니다.

-실습파일의main-1.c�파일내용을복사해서main.c로저장

합니다.

-커밋로그에 'fixed�#1'을포함하여커밋합니다.

- Feature�브랜치를푸시합니다.

Page 86: GitHub 실습 교육

86 /�GitHub 실습

Pull�Request

기능개발이완료된후에는

Git Flow의 Finish�Feature를

이용하여기능브랜치를

develop으로머지할수도

있습니다.

Page 87: GitHub 실습 교육

87 /�GitHub 실습

Pull�Request

하지만이렇게하지않고 GitHub에서Pull�Request를생성하는

방법을알아봅니다.�이런방식을 GitHub�Flow라고부릅니다.

본교육에서는 Git Flow와 GitHub�Flow를조합한workflow를

안내합니다.

Page 88: GitHub 실습 교육

88 /�GitHub 실습

Pull�Request

저장소페이지의상단 Pull�Requests�클릭

오른쪽상단의 New�pull�request�클릭

Page 89: GitHub 실습 교육

89 /�GitHub 실습

Pull�Request

compare에서

base로머지하는

풀리퀘스트를만듭니다.

우리는 feature/iss1-create-skeleton을develop으로

머지할것이기 때문에 그림과같이선택합니다.

Page 90: GitHub 실습 교육

90 /�GitHub 실습

Pull�Request

Page 91: GitHub 실습 교육

91 /�GitHub 실습

Pull�Request

Page 92: GitHub 실습 교육

92 /�GitHub 실습

Pull�Request

Page 93: GitHub 실습 교육

93 /�GitHub 실습

Pull�Request

Page 94: GitHub 실습 교육

94 /�GitHub 실습

Pull�Request

Page 95: GitHub 실습 교육

95 /�GitHub 실습

Pull�Request

Feature�브랜치를 develop에머지하기위한

풀리퀘스트를만드세요.

- base와 compare에각각지정하는브랜치에유의하세요.

Page 96: GitHub 실습 교육

96 /�GitHub 실습

Pull�Request

변경된라인에마우스오버하면

+�아이콘이나타납니다.

Page 97: GitHub 실습 교육

97 /�GitHub 실습

Pull�Request

해당라인에댓글을추가할수있습니다.

Page 98: GitHub 실습 교육

98 /�GitHub 실습

Pull�Request

Page 99: GitHub 실습 교육

99 /�GitHub 실습

Pull�Request

Page 100: GitHub 실습 교육

100 /�GitHub 실습

Pull�Request

의견을받았기때문에해당부분에대한수정을시작합니다.

(혹은댓글을통해토의합니다)

Page 101: GitHub 실습 교육

101 /�GitHub 실습

Pull�Request

첫번째의견에대한수정사항을커밋합니다.

되도록커밋은작은변경사항들을자주 하도록합니다.

Page 102: GitHub 실습 교육

102 /�GitHub 실습

Pull�Request

두번째의견에 대해서도 변경후커밋합니다.

Page 103: GitHub 실습 교육

103 /�GitHub 실습

Pull�Request

다시푸시합니다.

Page 104: GitHub 실습 교육

104 /�GitHub 실습

Pull�Request

다시 PR�페이지를 확인하면 이전의댓글은 X�표시되고

푸시한커밋들이 반영된 것을확인할수있습니다.

Page 105: GitHub 실습 교육

105 /�GitHub 실습

Pull�Request

이과정을 코드가머지할 수 있는수준이될때까지

계속반복합니다.

Page 106: GitHub 실습 교육

106 /�GitHub 실습

Pull�Request

머지를해도되겠다판단이 되면

:+1:로엄지표시를입력합니다.

(각팀의나름의싸인을 이용하세요)

Page 107: GitHub 실습 교육

107 /�GitHub 실습

Pull�Request

나름의룰을 정하여머지 시점을결정합니다.

예)�모두의 엄지,�과반수의 엄지등등

Page 108: GitHub 실습 교육

108 /�GitHub 실습

Pull�Request

풀리퀘스트의 diff기능을이용하여코드리뷰를하고

리뷰의견을해결한후머지 결정까지진행해보세요.

-조원은 diff화면에서특정라인에대한 의견을작성

-조장은전달받은의견을토대로코드를수정

- main-2.c�파일을복사해main.c내용을변경한후커밋

- main-3.c�파일을복사해main.c내용을변경한후커밋

-조원은최종적으로머지해도좋을지판단

Page 109: GitHub 실습 교육

109 /�GitHub 실습

Pull�Request

GitHub�상에서 바로 머지를 할수있습니다.

Page 110: GitHub 실습 교육

110 /�GitHub 실습

Pull�Request

GitHub�상에서 바로 머지를 할수있습니다.

Page 111: GitHub 실습 교육

111 /�GitHub 실습

Pull�Request

GitHub�상에서 바로 머지를 할수있습니다.

Page 112: GitHub 실습 교육

112 /�GitHub 실습

Pull�Request

GitHub�상에서 바로 머지를 할수있습니다.

Page 113: GitHub 실습 교육

113 /�GitHub 실습

Pull�Request

내로컬 저장소에는아직원격저장소과

로컬저장소에브랜치가남아있는것으로

나옵니다.

Page 114: GitHub 실습 교육

114 /�GitHub 실습

Pull�Request

도구모음에서 Fetch를클릭합니다.

Prune�...�remote(s)에체크한후

OK를클릭합니다.

원격저장소의 브랜치정보가사라졌습니다.

Page 115: GitHub 실습 교육

115 /�GitHub 실습

Pull�Request

develop으로체크아웃합니다.

머지된브랜치를삭제합니다.

Page 116: GitHub 실습 교육

116 /�GitHub 실습

Pull�Request

풀리퀘스트 페이지의머지버튼을이용하여

feature�브래치를 develop브랜치로머지하고

로컬의 feature�브랜치 정보를정리합니다.

(조원은 develop의변경사항을 pull�받습니다)

Page 117: GitHub 실습 교육

117 /�GitHub 실습

Pull�Request

이제각자맡은이슈를앞의 안내에따라개발하고

PR을생성하여리뷰 받고머지하세요.

Page 118: GitHub 실습 교육

118 /�GitHub 실습

충돌해결

충돌해결방법을알아보기위해일부러충돌을만들어봅시다.

동일한커밋으로부터조장은 conflict1로 feature�브랜치를생

성하고조원은 conflict2로 feature브랜치를생성했다고가정

해봅시다.

Page 119: GitHub 실습 교육

119 /�GitHub 실습

충돌해결

feature/confilict1

feature/confilict2

Page 120: GitHub 실습 교육

120 /�GitHub 실습

충돌해결

두 feature�브랜치의풀리퀘스트를생성할때는

두풀리퀘스트가모두머지가능하게표시될것입니다.

하지만, conflict1의풀리퀘스트를먼저머지한후에

conflict2의PR�페이지를보면자동머지가안 되는것을

확인할수있습니다.

Page 121: GitHub 실습 교육

121 /�GitHub 실습

충돌해결

conflict2의담당자는 develop으로체크아웃한후 풀받습니다.

다시 feature/conflict2로

체크아웃한후 develop을

머지합니다.

Page 122: GitHub 실습 교육

122 /�GitHub 실습

충돌해결

당연히충돌이납니다.

Page 123: GitHub 실습 교육

123 /�GitHub 실습

충돌해결

충돌난파일은느낌표로나타납니다.

Page 124: GitHub 실습 교육

124 /�GitHub 실습

충돌해결

충돌난영역은

<<<<<<<�HEAD

....

=======

....

>>>>>>>�[머지한 브랜치]

로표시됩니다.

내가 수정한내용

머지한브랜치에서수정한내용

Page 125: GitHub 실습 교육

125 /�GitHub 실습

충돌해결

feature/confilict1

feature/confilict2

Page 126: GitHub 실습 교육

126 /�GitHub 실습

충돌해결

충돌표시를지우고적절하게두변경사항을반영하여

수정합니다.

Page 127: GitHub 실습 교육

127 /�GitHub 실습

충돌해결

옵션에서머지툴설정했을시

외부머지툴을사용하여도됩니다

Page 128: GitHub 실습 교육

128 /�GitHub 실습

충돌해결

충돌을해결한파일은충돌해결로표시합니다.

(stage로추가하는것과동일)

Page 129: GitHub 실습 교육

129 /�GitHub 실습

충돌해결

모든충돌을해결했으면커밋/푸시

Page 130: GitHub 실습 교육

130 /�GitHub 실습

충돌해결

다시 PR�페이지를확인하면자동머지가가능합니다.

Page 131: GitHub 실습 교육

131 /�GitHub 실습

충돌해결

충돌상황을발생시켜충돌을해결하는법을실습해봅시다.

-시작하기전모두 develop을pull

-조장은 conflict1�feature�브랜치를생성

-조원은 conflict2�feature�브랜치를생성

-앞서봤던대로 코드를수정하고커밋/푸시

-조장이먼저 conflict1에대한풀리퀘스트를머지

-조원의 conflict2�풀리퀘스트가충돌난것을확인

-조원은충돌을해결한후다시머지

Page 132: GitHub 실습 교육

132 /�GitHub 실습

rebase활용

머지만을사용하여프로젝트를진행할경우

이런커밋그래프를만나게 될수도...

프로젝트의히스토리를보기굉장히어렵습니다.

Page 133: GitHub 실습 교육

133 /�GitHub 실습

rebase활용

기본원칙

- Feature�브랜치를푸시하기전 develop에 rebase

-머지전 develop에내 feature�브랜치가가지친 후의커밋이

존재한다면다시 develop에 rebase

- develop�머지시에다른 사람들은잠시 develop을놔두기

Page 134: GitHub 실습 교육

134 /�GitHub 실습

rebase활용

충돌상황이있는예제를 통해 rebase실습을해봅시다.

조장은 conflict3�브랜치를,조원은 conflict4�브랜치를생성합니

다.

Page 135: GitHub 실습 교육

135 /�GitHub 실습

rebase활용

조장은위코드와같이 변경한후 커밋합니다.

Page 136: GitHub 실습 교육

136 /�GitHub 실습

rebase활용

이제풀리퀘스트를위해 feature�브랜치를 push�해야합니다.

이때꼭 develop을pull�받아 develop에변경된커밋이없는지

확인합니다.

위그림과같이기능을 개발하는동안다른커밋이생겼다면

feature�브랜치를 develop에 rebase합니다.

Page 137: GitHub 실습 교육

137 /�GitHub 실습

rebase활용

Feature�브랜치를체크아웃 받은상태에서

develop�브랜치위에서 컨텍스트메뉴를불러와

Rebase�current�changes�on�develop을클릭합니다.

Page 138: GitHub 실습 교육

138 /�GitHub 실습

rebase활용

확인창에서 OK를클릭합니다.

충돌이없다면그대로진행이됩

니다.

Page 139: GitHub 실습 교육

139 /�GitHub 실습

rebase활용

feature�브랜치가 develop의최신커밋으로부터나온것으로변

경된것을확인할수 있습니다.

rebase�전

rebase�후

Page 140: GitHub 실습 교육

140 /�GitHub 실습

rebase활용

드디어 push할수있게 되었습니다.

Feature�브랜치를 push하고풀리퀘스트를만듭니다.

Page 141: GitHub 실습 교육

141 /�GitHub 실습

rebase활용

동시에조원은아래와같이 코드를수정하고커밋한후

develop의변경사항을 확인하여 rebase가필요하다면

rebase한후역시 push하고풀리퀘스트를만듭니다.

Page 142: GitHub 실습 교육

142 /�GitHub 실습

rebase활용

이제 feature/conflict3�브랜치가리뷰가완료되고

조장이머지한다고생각해보겠습니다.

Page 143: GitHub 실습 교육

143 /�GitHub 실습

rebase활용

하지만그전에다시 develop�브랜치에새로운커밋이존재하는

지확인해봅니다.

머지할브랜치가 develop의마지막커밋으로부터나와있기때

문에이번에는 rebase를할필요가없겠습니다.

Page 144: GitHub 실습 교육

144 /�GitHub 실습

rebase활용

풀리퀘스트페이지에서머지를클릭하여머지합니다.

결과는아래와같습니다.

Page 145: GitHub 실습 교육

145 /�GitHub 실습

rebase활용

이제 conflict4도리뷰가완료되어조원이머지를한다고생각해

봅시다.충돌이났기때문에 자동머지가되지않습니다.그리고

develop브랜치에도새로운 커밋(conflict3을머지하는)이생겼

기때문에 rebase가필요합니다.

Page 146: GitHub 실습 교육

146 /�GitHub 실습

rebase활용

머지하기전 99c8594�커밋의부모커밋을 5240aa1로변경하기

위해 rebase합니다.

Page 147: GitHub 실습 교육

147 /�GitHub 실습

rebase활용

conflict4�브랜치가체크아웃된 상태에서 develop으로 rebase합

니다.

Page 148: GitHub 실습 교육

148 /�GitHub 실습

rebase활용

rebase�진행중 충돌이 일어납니다.

Page 149: GitHub 실습 교육

149 /�GitHub 실습

rebase활용

충돌을해결한후 stage�상태로변경합니다.

Page 150: GitHub 실습 교육

150 /�GitHub 실습

rebase활용

그다음 Actions메뉴에서

Continue�Rebase를클릭합니다.

Page 151: GitHub 실습 교육

151 /�GitHub 실습

rebase활용

feature/conflict4브랜치가 develop의최신커밋으로부터

나오는새로운 커밋을 만들어낸것을확인할수있습니다.

로컬의 feature�브랜치는 rebase가되었지만 remote(origin)의

feature�브랜치는 여전히 존재하는것도확인할수있습니다.

Page 152: GitHub 실습 교육

152 /�GitHub 실습

rebase활용

이제 feature�브랜치를 다시 push해줍니다.

하지만오류가 발생하며 push가되지않습니다.

remote(origin)에이미 push된커밋때문입니다.

Page 153: GitHub 실습 교육

153 /�GitHub 실습

rebase활용

이미 remote에push된브랜치를 rebase하여

다시 push하기위해서는 터미널로직접명령어를입력해

주어야합니다.

$�git push�origin�feature/conflict4�--force

Page 154: GitHub 실습 교육

154 /�GitHub 실습

rebase활용

이제다시 풀리퀘스트 페이지에서머지를하면 아래와같이 깔

끔하게정리된 그래프를 확인할수있습니다.

Page 155: GitHub 실습 교육

155 /�GitHub 실습

rebase활용

rebase를사용하는 flow를실습해봅니다.

-조장은 conflict3�feature�브랜치를생성

-조원은 conflict4�feature�브랜치를생성

-각자코드를수정한후 커밋

- push하기전 develop을확인하여필요하다면 rebase

-풀리퀘스트를생성

-리뷰완료후 머지시에도 develop을확인하여필요하다면

rebase

Page 156: GitHub 실습 교육

156 /�GitHub 실습

rebase활용

rebase는이미생성된 커밋을고치기때문에 push된커밋을

rebase하는것을권장하지 않는다고되어 있습니다.왜냐하면

이미다른 사람이 pull�받은커밋을다시고치면엄청난혼란을

가져올수 있기때문입니다.하지만앞서예제에서 feature�브

랜치는담당자만이 사용하고있다는가정하에 이미 push된브

랜치를 rebase하고있습니다.

Page 157: GitHub 실습 교육

157 /�GitHub 실습

rebase활용

rebase는 git사용법중에서도 고급사용법이므로팀에서이제

막 git을도입해 사용하고 있다면모든구성원이 git에익숙해진

후에 rebase를활용한 flow를도입하시길권장드립니다.

Page 158: GitHub 실습 교육

158 /�GitHub 실습

릴리즈생성

릴리즈준비가 되면 Git Flow로릴리즈브랜치를생성합니다.

Page 159: GitHub 실습 교육

159 /�GitHub 실습

릴리즈생성

Git Flow에서 Start�New�Release를클릭

Page 160: GitHub 실습 교육

160 /�GitHub 실습

릴리즈생성

적당한 이름으로

릴리즈 브랜치를

생성합니다.

Page 161: GitHub 실습 교육

161 /�GitHub 실습

릴리즈생성

이릴리즈브랜치를이용하여최종테스트를거치며

릴리즈할수있는지검증합니다.

Page 162: GitHub 실습 교육

162 /�GitHub 실습

릴리즈생성

릴리즈브랜치에대한검증이완료되었다면

Git Flow의 Finish�Release를클릭합니다.

Page 163: GitHub 실습 교육

163 /�GitHub 실습

릴리즈생성

릴리즈를완료하면

릴리즈브랜치가

develop과master에

머지되고 tag가생성됩니다.

Page 164: GitHub 실습 교육

164 /�GitHub 실습

릴리즈생성

그후

develop과

master,�tag까지

푸시해줍니다.

Page 165: GitHub 실습 교육

165 /�GitHub 실습

릴리즈생성

GitHub의저장소메인페이지를확인하면 release가생성된것

을확인할수 있습니다.

Page 166: GitHub 실습 교육

166 /�GitHub 실습

릴리즈생성

릴리즈페이지에서 [Tags]�탭을선택한후 지금생성한릴리즈

태그의 [Add�release�notes]를클릭합니다.

Page 167: GitHub 실습 교육

167 /�GitHub 실습

릴리즈생성 태그

이름

설명

바이너리파일등을첨부가능

Page 168: GitHub 실습 교육

168 /�GitHub 실습

릴리즈생성

Page 169: GitHub 실습 교육

169 /�GitHub 실습

릴리즈생성

릴리즈를 생성해봅니다.

-릴리즈브랜치를 생성

-릴리즈를 완료

-결과를푸시

- GitHub페이지에서태그의릴리즈노트작성

Page 170: GitHub 실습 교육

170 /�GitHub 실습

정리

- GitHub과 SourceTree를이용한Git기본사용법

-저장소생성,�복제,�파일상태변경,�커밋,�푸시

- GitHub을이용한프로젝트관리

-협업자설정,�마일스톤/라벨/이슈관리

-기능의개발,�GitHub�flow(Pull�Request)

- rebase를활용한로그그래프관리

-릴리즈생성

Page 171: GitHub 실습 교육

Thank�You.