-
Notifications
You must be signed in to change notification settings - Fork 1
/
GIT: [동빈나 GIT 설치 및 사용법 ] 시리즈 정리
316 lines (263 loc) · 12.5 KB
/
GIT: [동빈나 GIT 설치 및 사용법 ] 시리즈 정리
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
====== GIT 설치 및 사용법 익히기 내용정리 =====
from Youtube "Git으로 시작하는 협업 및 오픈소스 프로젝트"
uploaded in Dec 2019=8 by 동빈나
1강. GIT 설치 및 사용법
Git: 분산형 협업도구
GIT 가입과 설치
1) Git Hub sign-up
2) Create a new repository
3) Git SOFTWARE 다운로드 http://git-scm.com/download/win
> git
> git--version
> git config --global user.name sooish
> git config --global user.email [email protected]
> cd 업로드할 파일이 저장된 폴더의 디렉토리 입력
> git clone http://---- git hub 저장소 주소 치기
> 폴더 안에 git 저장소가 생김(로컬 repository) - remote repository(git hub)
> cd 저장소 이름 치기 (그 안으로 이동)
> git add 파일이름
> git commit -m ""
> git push
2강. 오픈소스 활동하느 이유
오픈소스 활동, contribution 활동
committer
오픈소스 라이센스 : MIT License, Apache License,GPL...
3강. GIT 장점
여러사람과 관리해서 협업가능
하나의 소스코드를 여러명이 동시에 보면서 병렬적으로 소스코드 수정 가능
중앙서버없이 분산형으로 관리
분산적 개발, 효율적 개발, 비선형적 개발(branch, 트리구조 사용).
4강. GIT 동작원리
깃프로젝트에 담겨있는 데이터들은 파일 시스템 상에서의 스탭샷 같은 것. 수정 내역 자체를 저장
1) GIT 프로젝트의 구성요소:
2) Working directory - 작업할 파일이 있는 디렉토리
3) Staging Area - 커밋을 수행할 파일들이 올라가는 영역
4) Git Directory - Git 프로젝트의 메타 데이터와 데이터 정보가 저장되는 디렉토리
working directory - git add -> staging area -git commit -> Local Repository
-> git push -> Remote Repository
Working Diretory <- git merge - Local Repository <- git fetch - Remote Repository
or Working Directory < - git pull(git fetch와 git merge를 한번에) - Remote Repository
저장소(repo)는 실제 소스코드가 담겨 있으면서 커밋내역 등의 모든 작업 이력이 담겨 있는 공간
환경설정과 관련한 폴더. 각종 데이터와 해시값 등이 담김
5강. 소스코드 수정하여 프로젝트 반영하기
1) 해당 프로젝트에 소속된 사람이 아닌 경우(오픈소스)
pull request(PR)을 작성하여 오픈소스에 기여할 수 있음
2) 해당 프로젝트에 소속된 사람인 경우
commit -> push
>git clone git url 복사
>dir 해당폴더 확인
>해당폴더로 이동
>dir 업로드할 파일 학인
>git status 특정파일 확인
>git add 특정파일
>git status: staging area에 올라가 있는 것 확인가능
>git reset : 특정 파일 내리는 기능
>git add. : 모든 수정 내역 반영됨
>git commit -m ""
>git push
>git checkout -- 파일명 : 수정사항 복원
>git commit --amend : 커밋 수정사항
6장. 커밋내용 수정하기
git log 그동안 작업한 내역 확인
계속 이어지는 로그에서 나오려면 'q'입력
각각의 commit은 hash값으로 할당돼 있음
작업 이전으로 돌아가려면 git reset--hard 해시값
그 해시값 이후의 작업들 다 지우겠다는 것
local 저장소는 이전으로 돌아가 있으나 remote 저장소는 예전 그대로
두개의 저장소의 구성이 달라졌으므로 push 해서는 안됨
git push-f
commmit 메세지 수정방법
git commit --amend
유닉스 에디터로 들어감. A/I 누르면 insert, 수정하고 esc : WQ!
수정되고 밖으로 나온다
7장. 브랜치 사용방법
여러 개발자들이 동시에 프로젝트 수행하여 각기 다른 기능을 개발할 수 있게 하는 기능
통합브랜치(master branch) : 배포가능한 안정화된 브랜치
토픽브랜치(topic branch) : 특정한 기능 위해 만들어진 브랜치. Develop Branch, Bug Fix Branch 등
Master Branch -->
--> Develop Branch -> merge
--> Bug Fix Branch -> merge
따라서, master branch는 언제나 안정화된 상태
>git brach : 현재 master branch만 있는 상태 확인
>git branch develop : deveop branch 만듦
>git branch : develop branch 가 생성된것 확인할 수 있다.
>git checkout develop : deveop branch로 이동
>git branch : develop branch에 있는 상태 확인
파일 수정후
>git add .
>git commit -m""
>git log(git hub에는 아직 반영이 안된 상태, merge 안된 상태)
>git checkout master : master branch로 이동
>git merge develop : merge
>git log: master, develop 모두 수정된 함수 반영 확인
>git push : git hub(원격지)에서도 반영될 수 있도록 함수
>git branch -d develop : 병합 다한 branch 제거해줌
>git branch : branch 확인
8장. Merge 관련 발생하는 conflict 해결방법
두개 이상의 브랜치에서 동일한 파일 수정, 서로 다른 내용일때 merge 충돌발생 가능
>git branch
>git branch develop
>git branch
>git checkout develop
>git add .
>git commit -m ""
>git log
>git checkout master
이 상태에서 파일 수정(devlop 브랜치와 다르도록)
>git log
이 상태에서는 동일한 소스코드에서 master branch,develop branch 서로 내용이 다름
여기에서 master branch에서 commit 진행
>git add .
>git commit -m ""
>git log
master branch만 보이고 develop branch는 보이지 않음
>gitchckout develop :develop branch로 이동
>git log
develop branch만 보이고 master branch는 보이지 않음. 파일의 상태와 메세지가 서로 같지 않기 때문
이럴때 어떻게 해야하나?
>git checkout master
>git merge develop : conflict 발생했다는 메세지 확인가능. 자동 merge 실패.
이때 파일 열어보면 서로 소스코드 다른 부분을 git에서 모두 명시해주고 있음을 확인할 수.
우리는 이중 어떤 것을 선택할지 수동으로 결정할 수 있음
이때 선택해서 저장하고
>git add .
>git commit -m ""
성공적으로 병합이 된것
>git merge develop
이미 병합이 되었다고 메세지가 뜬다
>git log
master branch, develop branch가 한페이지에 나타남
>git branch -d develop
>git log
>git push
9장. Git에서 원격지 저장소 관리하는 방법
원격저장소는 하나/여러개 가질 수도 있고, 용도별로 각기 다르게 활용할 수도 있다.
>cd local 저장소
>cd remote : 원격저장소로 어떤 것(origin)이 저장되어 있는지 확인할 수 있음
>git remote show origin : fetch, push 등의 주소 확인가능
>git remote add test(특정한 원격 저장소의 이름 설정) http//~ (경로)
>git remote -v : 원격지 전체 목록 확인
원격 저장소 이름 바꾸고자 할때는(test에서 -> temp로)
>git remote rename test temp
그 이후에는
>git log origin/master, git merge origin/origin 등으로 수행가능
>git remote rm temp (특정 저장소 제거 가능)
>git remote -v
10장. log 다루는 법
>git log : 최신순으로 각 commit 내역이 출력
엔터로 내려갈 수, q로 나올 수 있음
>git log --stat : 각 commit에 대한 통계정보
>graph : branch와 병합정보를 그래프로 출력
>git log -p -3: commit에 관련한 구체적인 정보를 출력(위에서부터 3개까지)
>git log --pretty=oneline : commit 정보를 우리가 지정한 방식으로 출력하도록 해줌(각각의 commit 내역 한줄에 나옴)
>git log --pretty=format:"%h -> %an,%ar,%s" --graph : h:해쉬값을 출력, an :author name 작성자 이름, ar:날짜, s:주제(메세지)
GitHub에서 commit/insights탭에서 이런 정보를 보여주고 있음
11장. 프로젝트 소개글 다루는 법(index 페이지 등으로 사용)
-README.md
12장. Git Archive
- 깃 아카이브란, 깃프로젝트에서 소스 코드만 추출하고 싶을때 사용 명령어
- 프로젝트 소스 코드 간단히 다운로드 받아서 사용하는 입장에서 사용가능
- 깃 프로젝트에서 .git 폴더 제외 다른 소스코드 내용만 압축파일 형태로 제공하자 할때 사용가능
>cd
>git archive --format:zip master(추출할 브랜치) -o(아웃풋 설정. 어떤 파일로 추출될건지 적어주는 것) Master.zip
실제 압축폴더 열면 깃 프로젝트 파일은 전혀 포함되어 있지 않고, 소스코드에 해당하는 파일들만 들어가 있음
>git archive --format:zip master(추출할 브랜치) -o(아웃풋 설정. 어떤 파일로 추출될건지 적어주는 것) ../Master.zip
깃 프로젝트의 상위 폴더에 해당 압축파일 내보낼 수도 있음.
13장. Git Rebase 명령으로 특정한 커밋 수정/삭제하기
1) 특정 커밋 수정하기
>cd
>git init : 깃 프로젝트 초기화
하나의 텍스트 파일 추가
>git add .
>git commit -m ""
해당 텍스트 파일의 내용을 수정
>git commit -m ""
해당 파일 삭제
>git commit -m ""
소스 코드 수정 내역들일 빠짐없이 깃 프로젝트에 기록되고 있음
또다른 파일 만든 다음
>git add .
>git commit -m""
>git log
4개의 commit 있음을 확인할 수
그 중 하나의 commit 메세지 수정(deltete -> drop이라는 이름으로)
>git rebase -i(interactive mode로 editor가 열림) HEAD~3(head를 기준으로 최근 3개의 커밋만 확인하겠다는 뜻)
원하는 메시지에 대고 reword라고 타입, 저장, 밖으로 나옴
나오자마자 어떻게 메세지 바꿀건지 물어봄, 그곳에 새로운 메시지 작성. 저장. 밖으로 나옴.
>git log
커밋 메세지 변경된 것을 확인할 수 있음.
커밋 기록이 매우 많을때 아주 뒤에 있는 것 변경하려면
>git rebase -i 특정 커밋의 해쉬값
넣어준 커밋의 앞쪽으로 모든 커밋 확인
2) 특정 커밋 삭제하기(다른 사람과 협업중에는 커밋 삭제 권장하지 않음. 충돌가능성)
>git rebase -i HEAD~3
>drop이라는 키워드 넣고 밖으로 나옴
>git log
폴더에서 확인하면, 커밋한 내용이 취소되어 이전의 상태로 돌아가 있음을 확인할 수 있음
14. Git Config 환경설정에 대해 알아보기
>git config --list : 환경설정 정보 확인
>git config --global core.editor vi : 코어 에디터 기본 에디터 설정
>cd 폴더 생성, 해당폴더로 이동
>git init
>cd. git
깃 폴더로 이동하여 내용 확인하면 congig라는 파일 확인할 수. 그 파일 안에 환경설정 내용 들어있음.
특정한 깃 프로젝트 안에서 사용할 사용자명도 별도 설정 가능
글로벌하게 설정한 환경설정과 특정 프로젝트 안에서 설정한 환경설정이 중복되는 경우, 후자가 우선적으로 따른다.
15. Git 커밋 날짜 변경 및 커미터 변경하기
파일 생성
>cd
>git add .
>git commit -m ""
>sudo vi "파일명"
파일내용 수정
>git add.
>git commit -m ""
>git log
새로운 파일 생성
>git add.
>git commit -m ""
파일내용 수정
>git add.
>git commit -m ""
>git log :4번의 커밋 확인
1) git rebase 명령어 사용
>git rebase -i 이전 커밋의 해쉬값
리베이스 에디터가 열림
>pick-> edit으로 바꿈
밖으로 나옴
>GIT_COMMITER_DATE="OCT 1 10:00: 2018 +0000" git commit --amend --no-eidt --date "OCT 1 10:00: 2018 +0000"
해당 커밋 업데이트 되었다는 메세지
>git log
>git rebase --continue
변경된 내용 반영하겠다고 넣어주기
>git log
변경 확인
2) 필터링 이용하여 날짜 변경
>git filter-branch -f --env-filter \ :무조건 필터가 수행되게 함
> 'if ( $GIT_COMMIT = 해쉬값 )
then
export GIT_AUTHOR_DATE="OCT 1 10:00: 2018 +0000"
export GIT_COMMITER_DATE="OCT 1 10:00: 2018 +0000"
fi'
어떻게 필터링을 수행할지 내용을 넣어주는 것. *if문에서 공백에 주의해야 함!!!
>git log
다른 해시값들도 다 변경됨
3) 필터링 이용하여 커미터 변경
>git filter-branch -f --env-filter '
> OLD EMAIL=""
> CORRECT NAME=""
> CORRECT EMAIL=""
> if ( $GIT_COMMITTER_EMAIL = $OLD_EMAIL )
> then
> export GIT_COMMITER_NAME="$CORRECT_NAME"
> export GIT_COMMITER_EMAIL="$CORRECT_EMAIL"
> fi
> if ($GIT_AUTHOR_EMAIL = $OLD_EMAIL )
> tehn
> export GIT_AUTHOR_NAME="$CORRECT_NAME"
> export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
> fi
> git log
깃헙에서 repository만든후
> git remote add origin http//~~
> git push --set-upstream original master