-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathgit_github.html
More file actions
541 lines (481 loc) · 18.4 KB
/
git_github.html
File metadata and controls
541 lines (481 loc) · 18.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
<!DOCTYPE html>
<html>
<head>
<title>git_github</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */
/* RESET
=============================================================================*/
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
}
/* BODY
=============================================================================*/
body {
font-family: Helvetica, arial, freesans, clean, sans-serif;
font-size: 14px;
line-height: 1.6;
color: #333;
background-color: #fff;
padding: 20px;
max-width: 960px;
margin: 0 auto;
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
/* BLOCKS
=============================================================================*/
p, blockquote, ul, ol, dl, table, pre {
margin: 15px 0;
}
/* HEADERS
=============================================================================*/
h1, h2, h3, h4, h5, h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
}
h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
font-size: inherit;
}
h1 {
font-size: 28px;
color: #000;
}
h2 {
font-size: 24px;
border-bottom: 1px solid #ccc;
color: #000;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
h6 {
color: #777;
font-size: 14px;
}
body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
margin-top: 0;
padding-top: 0;
}
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0;
}
h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
margin-top: 10px;
}
/* LINKS
=============================================================================*/
a {
color: #4183C4;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* LISTS
=============================================================================*/
ul, ol {
padding-left: 30px;
}
ul li > :first-child,
ol li > :first-child,
ul li ul:first-of-type,
ol li ol:first-of-type,
ul li ol:first-of-type,
ol li ul:first-of-type {
margin-top: 0px;
}
ul ul, ul ol, ol ol, ol ul {
margin-bottom: 0;
}
dl {
padding: 0;
}
dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px;
}
dl dt:first-child {
padding: 0;
}
dl dt>:first-child {
margin-top: 0px;
}
dl dt>:last-child {
margin-bottom: 0px;
}
dl dd {
margin: 0 0 15px;
padding: 0 15px;
}
dl dd>:first-child {
margin-top: 0px;
}
dl dd>:last-child {
margin-bottom: 0px;
}
/* CODE
=============================================================================*/
pre, code, tt {
font-size: 12px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
code, tt {
margin: 0 0px;
padding: 0px 0px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px;
}
pre>code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}
pre {
background-color: #f8f8f8;
border: 1px solid #ccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}
pre code, pre tt {
background-color: transparent;
border: none;
}
kbd {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #DDDDDD;
background-image: linear-gradient(#F1F1F1, #DDDDDD);
background-repeat: repeat-x;
border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
border-image: none;
border-radius: 2px 2px 2px 2px;
border-style: solid;
border-width: 1px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
line-height: 10px;
padding: 1px 4px;
}
/* QUOTES
=============================================================================*/
blockquote {
border-left: 4px solid #DDD;
padding: 0 15px;
color: #777;
}
blockquote>:first-child {
margin-top: 0px;
}
blockquote>:last-child {
margin-bottom: 0px;
}
/* HORIZONTAL RULES
=============================================================================*/
hr {
clear: both;
margin: 15px 0;
height: 0px;
overflow: hidden;
border: none;
background: transparent;
border-bottom: 4px solid #ddd;
padding: 0;
}
/* TABLES
=============================================================================*/
table th {
font-weight: bold;
}
table th, table td {
border: 1px solid #ccc;
padding: 6px 13px;
}
table tr {
border-top: 1px solid #ccc;
background-color: #fff;
}
table tr:nth-child(2n) {
background-color: #f8f8f8;
}
/* IMAGES
=============================================================================*/
img {
max-width: 100%
}
</style>
</head>
<body>
<p><style>
div.polaroid {
width: 640px;
box-shadow: 0 10px 30px 0 rgba(0, 0, 0, 0.2), 0 16px 30px 0 rgba(0, 0, 0, 0.19);
text-align: center;
margin-bottom: 0.5cm;
}
</style></p>
<h1><strong>Git과 GitHub</strong>을 이용한 프로젝트 관리</h1>
<p><a href="https://git-scm.com/"><strong>git</strong></a>은 소스코드의 변경을 효과적으로 관리하기 위해 개발된 '<strong><a href="https://git-scm.com/book/ko/v1/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F#분산-버전-관리-시스템">분산형 버전 관리 시스템</a></strong>'이지만, 소스코드 외에 텍스트 기반 파일의 버전관리에 널리 사용되고 있다. </p>
<p><a href="https://github.com/"><strong>GitHub</strong></a>는 <strong>git</strong>의 원격 저장소로서 협업플랫폼의 역할을 수행한다. 여기서 <strong>저장소</strong>란 버전관리 대상이 되는 특정한 프로젝트의 파일들을 저장하는 공간을 나타내며, 지역 저장소와 원격 저장소로 구분된다. <em>지역 저장소</em>는 현재 작업하고 있는 컴퓨터 내에 위치하는 프로젝트 파일을 저장하는 디렉토리를 의미하고, <em>원격 저장소</em>는 인터넷 상의 서버에 위치하며, 여러 <strong>git</strong> 클라이언트와 공유될 수 있다.</p>
<p><a href="https://desktop.github.com/"><strong>GitHub Desktop</strong></a>은 GUI 기반의 git 클라이언트 중에 하나로, 이 문서에서는 <strong>GitHub Desktop</strong>를 이용하여 <strong>Android Project</strong>의 소스를 관리하는 두 가지 시나리오를 설명한다. </p>
<ol>
<li><a href="#1"><strong>Android Project</strong>의 버전관리</a></li>
<li><a href="#2"><strong>GitHub</strong>을 이용한 협업하기</a></li>
</ol>
<p><a name="1"></a></p>
<h2>1. <strong>Android Project</strong>의 버전관리</h2>
<p><strong>Android Project</strong>의 버전관리 시나리오는 다음과 같다.</p>
<ol>
<li><a href="#1.1"><strong>Android Project</strong>를 위한 새로운 지역 <strong>git</strong> 저장소 생성</a></li>
<li><a href="#1.2"><strong>Android Project</strong>의 일부 파일을 수정 후, 지역 <strong>git</strong> 저장소에 커밋(commit)</a></li>
<li><a href="#1.3"><strong>git</strong> 저장소를 이전 커밋(commit)으로 되돌림 (<em>필요한경우</em>)</a> </li>
<li><a href="#1.4">원격 <strong>git</strong> 저장소(<strong>GitHub</strong>)에 푸시(push)</a></li>
</ol>
<h3>가. 사전준비</h3>
<ul>
<li><a href="https://kwanulee.github.io/Android/intro-android/start-android-project.html#start-android"><strong>Android Project</strong> 생성 (예, HelloAndroid)</a></li>
<li><a href="install_git_clients.html"><strong>git</strong> 클라이언트 설치</a> </li>
<li><a href="create-github-account.html"><strong>GitHub</strong> 계정 만들기</a>
</li>
</ul>
<p><a name="1.1"></a></p>
<h3>나. <strong>Android Project</strong>를 위한 새로운 지역 <strong>git</strong> 저장소 생성</h3>
<ol>
<li>
<p><strong>GitHub Desktop</strong> 시작화면에서 <strong>Create new repository</strong> 클릭</p>
<div class="polaroid">
<img src="figure/github-desktop-new-repository.JPG">
</div>
<p>[<strong>다른 방법</strong>] [<strong>File<strong>] 메뉴에서 [</strong>New respository..</strong>] 클릭</p>
<div class="polaroid">
<img src="figure/create-local-repository-windows.PNG">
</div>
</li>
<li>
<p>다음 정보 입력 및 선택 후 [<strong>Create repository</strong>] 선택</p>
<ul>
<li>[<strong>Name</strong>]: 저장소 (프로젝트) 이름 (예, <em>HelloAndroid</em> - 이 이름의 Android Project이 생성된 것을 가정 )</li>
<li>[<strong>Local path</strong>]: 저장소의 위치 (예, <em>C:\Users\kwlee\AndroidStudioProjects</em>)</li>
<li>[Git ignore]: <strong>Android</strong> 선택 (Git에서 버전관리되지 않는 대상 파일들을 설정한 것)</li>
</ul>
<div class="polaroid">
<img src="figure/create-new-repository-wizard.PNG">
</div>
</li>
<li>새로운 <strong>git</strong> 저장소(예, <em>C:\Users\kwlee\AndroidStudioProjects\HelloAndroid</em>)에 .git 폴더 및 .gitattributes, .gitignore 파일이 생성되어 있음을 확인할 수 있다.</li>
</ol>
<p><a name="1.2"></a></p>
<h3>다. <strong>Android Project</strong>의 일부 파일을 수정 후, 지역 <strong>git</strong> 저장소에 커밋(commit)</h3>
<p><strong>커밋(commit)</strong>이란 하나 이상의 파일에 대한 변경을 <strong>git</strong> 저장소에 저장하는 것을 의미한다. 다음은 <strong>Android Project</strong>의 일부 파일을 수정 후, 지역 <strong>git</strong> 저장소에 커밋을 하는 절차를 설명한다.</p>
<ol>
<li>
<p><strong>[Android Studio]</strong>: <strong>Android Project</strong>의 일부 파일을 수정 </p>
<p>예를 들어, <strong>HelloAndroid</strong> 프로젝트에서 <em>activity_main.xml</em> 파일의 <strong>TextView</strong> 위젯의 <em>android:text</em> 속성 값을 '<em>Hello Android</em>'로 변경 </p>
<div class="polaroid">
<img src="figure/helloandroid-project-change1.png">
</div>
</li>
<li>
<p><strong>[GitHub Desktop]</strong>: 커밋에 포함시킬 혹은 포함하지 않을 변경을 선택 하고, 커밋 메시지 작성후, [<strong>Commit to BRANCH</strong>] 클릭 </p>
<div class="polaroid">
<img src="figure/commit-message.PNG">
</div>
</li>
</ol>
<p><a name="1.3"></a></p>
<h3>라. 지역 <strong>git</strong> 저장소를 이전 커밋(commit)으로 되돌림 (<em>필요한 경우</em>)</h3>
<p>다음은 현재 <strong>git</strong> 저장소를 이전 커밋 상태로 되돌리는 방법이다. 만약 여러 커밋을 되돌리고자 하는 경우에는 최신것부터 시작하여 순서대로 되돌리는 것이 좋다.</p>
<ol>
<li>
<strong>[GitHub Desktop]</strong>: <strong>History</strong> 탭의 커밋 목록에서 되돌리고자 하는 커밋의 오른쪽 마우스버튼 클릭 후, 메뉴의 <strong>Revert this commit</strong> 클릭
<div class="polaroid">
<img src="figure/revert-commit.PNG">
</div>
</li>
</ol>
<p><a name="1.4"></a></p>
<h3>마. 지역 <strong>git</strong> 저장소를 원격 저장소(<strong>GitHub</strong>)에 푸시(push)</h3>
<ol>
<li>
<p><strong>GitHub Desktop</strong>에서 <strong>GitHub</strong> 계정에 로그인 설정 </p>
<ul>
<li><strong>File</strong> > <strong>Options..</strong> 메뉴를 클릭</li>
<li><strong>GitHub.com</strong>의 <strong>Sign in</strong> 버튼 클릭 </li>
<li>
<strong>Sign in</strong> 화면에서 <strong>GitHub</strong>의 Username과 Password 입력후 <strong>Sign in</strong> 클릭
<div class="polaroid">
<img src="figure/signin-github.PNG">
</div>
</li>
</ul>
</li>
<li>
<p>작업중인 지역 <strong>git</strong> 저장소를 원격 저장소(<strong>GitHub</strong>)에 올리기</p>
<ul>
<li><strong>GitHub Desktop</strong> 화면 상단의 <strong>Publish repository</strong> 클릭 </li>
<li>
<em>Keep this code private</em> 체크박스 선택 해제 후, [<strong>Publish repository</strong>] 버튼 클릭
<div class="polaroid">
<img src="figure/publish-repository.png">
</div>
</li>
</ul>
</li>
<li>
<p>웹브라우저를 통해 <strong>GitHub</strong>의 원격 저장소에 지역 <strong>git</strong> 저장소의 내용이 동기화 되어 있는 확인
</p>
<div class="polaroid">
<img src="figure/github-sync-result.png">
</div>
</li>
</ol>
<h2><a name="2"></a>2. <strong>GitHub</strong>이용한 협업하기</h2>
<p><strong>GitHub</strong>이용한 협업하기 두 명의 시나리오는 다음과 같다.</p>
<pre><code>가정
- GitHub에 두 개의 사용자 계정(예, kwanulee, kwanu70)이 존재
- kwanulee/HelloAndroid 저장소가 존재
- kwanulee/HelloAndroid 저장소를 kwanulee와 kwanu70이 공유하여 협업하고자 함
</code></pre>
<ol>
<li><strong>kwanulee/HelloAndroid</strong> 저장소의 Collaborator로 <em>kwanu70</em>을 추가 (참조. <a href="#2.1">가. <strong>GitHub</strong> 저장소에 Collaborator 추가하기</a>)</li>
<li><em>kwanu70</em>은 <strong>kwanulee/HelloAndroid</strong> 원격 저장소의 파일을 지역 <strong>git</strong> 저장소로 복제 (참조. <a href="#2.2">나. <strong>GitHub</strong> 저장소를 복제하기</a>)</li>
<li><em>kwanu70</em>은 지역 <strong>git</strong> 저장소로 복제된 파일을 변경/커밋하고, 이를 <strong>kwanulee/HelloAndroid</strong> 저장소와 동기화 (참조. <a href="#2.3">다. 복제된 <strong>GitHub</strong> 저장소를 수정하고 동기화하기</a>)</li>
<li><em>kwanulee</em>는 자신의 지역 <strong>git</strong> 저장소를 <strong>kwanulee/HelloAndroid</strong> 원격 저장소의 최신 상태로 동기화 (참조. <a href="#2.4">라. 원격 <strong>GitHub</strong> 저장소의 최신 내용을 지역 <strong>git</strong> 저장소로 가져오기</a>)</li>
</ol>
<p><a name="2.1"></a></p>
<h3>가. <strong>GitHub</strong> 저장소에 Collaborator 추가하기</h3>
<ol>
<li>
<p><strong>GitHub</strong> 저장소의 메인 화면에서 <strong>Settings</strong> 탭 선택</p>
<div class="polaroid">
<img src="figure/github-settings.png">
</div>
</li>
<li>
<p><strong>Settings</strong> 탭의 왼쪽 메뉴 중에 <strong>Collaborators</strong> 선택 한후, Collaborator로 추가할 <strong>GitHub</strong> 계정 ID (예, <em>kwanu70<em>)를 입력하고, [</em><em>Add collaborator</em></em>] 클릭</p>
<div class="polaroid">
<img src="figure/github-add-collaborator.png">
</div>
</li>
<li>
<p>Collaborator로 추가한 계정 사용자의 이메일로 아래와 같은 내용의 이메일이 전송되며, <strong>accept or decline</strong> 링크를 클릭하여 수락을 해야함</p>
<div class="polaroid">
<img src="figure/email-authentication.png">
</div>
<div class="polaroid">
<img src="figure/accept-invitation.png">
</div>
</li>
</ol>
<p><a name="2.2"></a></p>
<h3>나. <strong>GitHub</strong> 저장소를 복제하기</h3>
<ol>
<li>
<strong>GitHub Desktop</strong>의 [<strong>File<strong>] 메뉴에서 [</strong>Clone respository..</strong>] 클릭
<div class="polaroid">
<img src="figure/clone-file-menu-windows.png">
</div>
</li>
<li>
저장소 복제
<ul>
<li><strong>GitHub 사용자이름</strong>과 복제(Clone)하려는 <strong>GitHub 리파지토리</strong>를 입력, (예, kwanulee/HelloAndroid)</li>
<li>복제할 리포지토리가 저장될 로컬 패스를 지정 후, [<strong>Clone</strong>] 클릭 </li>
</ul>
<div class="polaroid">
<img src="figure/clone-url-win.png">
</div>
</li>
</ol>
<p><a name="2.3"></a></p>
<h3>다. 복제된 <strong>GitHub</strong> 저장소를 수정하고 동기화하기</h3>
<ol>
<li>
<p>AndroidStudio에서 복제된 <em>HelloAndroidCloned</em> 프로젝트를 열고, activity_main.xml 파일을 변경
<code></p>
<pre><code><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.kwlee.helloandroid.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Android!"
/>
</LinearLayout>
</code></pre>
<p></code></p>
</li>
<li>
<p>커밋에 포함시킬 혹은 포함하지 않을 <strong>변경을 선택</strong>하고 <strong>커밋 메시지 작성<strong>후, [</strong>Commit to master</strong>] 클릭 </p>
<div class="polaroid">
<img src="figure/commit-message2.PNG">
</div>
</li>
<li>
<p><strong>GitHub Desktop</strong> 화면 우측 상단의 [<strong>Push origin</strong>] 버튼 클릭
<div class="polaroid">
<img src="figure/github-desktop-sync-button.png">
</div></p>
</li>
<li>
<p>웹브라우저를 통해 <strong>GitHub</strong>의 원격 저장소에 지역 <strong>git</strong> 저장소의 내용이 동기화 되어 있는 확인
</p>
<div class="polaroid">
<img src="figure/github-sync-result.png">
</div>
</li>
</ol>
<p><a name="2.4"></a></p>
<h3>라 . 원격 <strong>GitHub</strong> 저장소의 최신 내용을 지역 <strong>git</strong> 저장소로 가져오기</h3>
<ol>
<li>
<p><strong>[GitHub Desktop]</strong>의 <strong>Fetch origin</strong>을 클릭</p>
<div class="polaroid">
<img src="figure/fetch-origin.PNG">
</div>
</li>
<li>
<p>만약 원격 <strong>GitHub</strong> 저장소에서 지역 <strong>git</strong> 저장소로 가져올 커밋이 존재한다면, <strong>Pull origin</strong>을 클릭하여 원격 <strong>GitHub</strong> 저장소의 커밋을 가져온다.</p>
<div class="polaroid">
<img src="figure/pull-origin.PNG">
</div>
</li>
</ol>
</body>
</html>
<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->