선형회귀함수

- "기울기와 절편을 찾는것" 

- 머신러닝 알고리즘 중 하나

 

당뇨병환자의 1년 후 병의 진전된 정도를 예측하는 모델 만들기

 

당뇨병 환자 데이터 가져오기

- 머신러닝 딥러닝 패키지에는 인공지능 학습을 위한 dataset가 준비되어있음

- 사이킷런, 케라스 : 다양한 데이터 세트 제공

 

1. load_diabetes( ) 함수로 당뇨병 데이터 준비하기

from sklearn.datasets import load_diabetes
diabetes = load_diabetes( )  #diabetes에 당뇨병 데이터 저장 # Bunch 클래스

   cf) Bunch 클래스 : 파이썬 딕셔너리와 유사. 예제 데이터 세트를 위해 준비된 것. 특별한 기능 X

 

2. 입력과 타깃 데이터의 크기 확인하기

diabetes 속성 중 data속성과 target 속성 : 우리가 필요한 입력과 타깃 데이터가 넘파이 배열로 저장되어있음

shape 속성 : 넘파이 배열의 크기 저장되어있음

print(diabetes.data.shape, diabetes.target.shape)
# (442, 10) (442,)

- data 는 422 X 10 크기의 2차원 배열 , target은 442개의 요소를 가진 1차원 배열

- diabetes.data는 442개의 행과 10개의 열로 구성

- : sample : feature(샘플의 특성)

- ex. 당뇨병 데이터에는 환자의 혈압,혈당,몸무게,키,등(feature)이 있음

       이 특성의 수치를 모아 1세트로 만들면 1개의 샘플(sample)이 나옴

- 입력 데이터의 특성 : 속성/독립변수(independent variable)/설명변수(explanatory variable), 등

 

3. 입력 데이터 자세히 보기 (slicing 사용)

diabetes.data[0:3]
#array([[ 0.03807591,  0.05068012,  0.06169621,  0.02187235, -0.0442235 ,
#        -0.03482076, -0.04340085, -0.00259226,  0.01990842, -0.01764613],
#       [-0.00188202, -0.04464164, -0.05147406, -0.02632783, -0.00844872,
#        -0.01916334,  0.07441156, -0.03949338, -0.06832974, -0.09220405],
#       [ 0.08529891,  0.05068012,  0.04445121, -0.00567061, -0.04559945,
#        -0.03419447, -0.03235593, -0.00259226,  0.00286377, -0.02593034]])

 

- 10개의 요소로 구성된 샘플 

- array([ [1번째 샘플의 요소들], [2번째 샘플의 요소들], [3번째 샘플의 요소들]])

4. 타깃 데이터 자세히 보기

diabetes.target[:3]
# array([151.,  75., 141.])

타깃 데이터는 10개의 요소로 구성된 샘플 1개에 대응

즉 위에서 출력한 1번째 샘플의 요소들[ 0.03807591,  0.05068012,  0.06169621,  0.02187235, -0.0442235 , -0.03482076, -0.04340085, -0.00259226,  0.01990842, -0.01764613]은 151.이라는 타깃 데이터에 대응됨

 

5. 당뇨병 환자 데이터 시각화하기

맥플롯립의 scatter( ) 함수로 산점도 그리기

import matplotlib.pyplot as plt
plt.scatter(diabetes.data[:,2],diabetes.target)		# 3번째 특성과 타깃 데이터로 산점도 그리기
plt.xlabel('third characteristic of diabetes.data')		
plt.ylabel('diabetes.target')		
plt.show()

 

1. 넘파이(파이썬 패키지 중 하나)

-

cf) 파이썬 리스트

my_list=[10,'hello list',20]
print(my_list[1])	# list의 index는 0부터 시작
# 실행결과 : hello list

 

2차원 배열(중첩된 배열)

my_list_2 = [[10,20,30],[40,50,60]]

-> 2X3크기  / 2행 3열

 

파이썬 리스트로 만든 배열 : 배열의 크기가 커질수록 성능이 떨어진다는 단점

따라서 넘파이 사용

- 저수준 언어로 다차원 배열 구현

- 배열의 크기가 커져도 높은 성능 보장

- 배열을 이용한 다양한 통계, 수학 함수 제공

 

코랩에서 넘파이 임포트하고 버전 확인하기

import numpy as np		#numpy를 np라는 별칭으로 부를 것
print(np.__version__)

 

 

넘파이로 배열만들기 ( 파이썬 리스트처럼 문자열 함께 담을수없음)

 

1. array( ) 함수로 2차원 배열만들기

my_arr = np.array([10,20,30],[40,50,60])
print(my_arr)
# [[10 20 30]
# [40 50 60]]

 

2. type( ) 함수로 넘파이 배열인지 확인하기

type(my_arr)
# numpy.ndarray

my_arr : ndarray(넘파이 배열 클래스)의 객체

코드 셀의 마지막 줄은 print( )를 사용하지 않아도 출력됨

 

3. 넘파이 배열에서 요소 선택하기

파이썬 리스트에서 요소 선택하는 방법과 동일

 

4. 넘파이 내장함수 사용하기

ex. sum( ) 함수 

 

맥플롯립으로 그래프 그리기

import matplotlib.pyplot as plt # 별칭 plt

1. 선 그래프 그리기

# y = x*x 예시
plt.plot([1,2,3,4,5],[1,4,9,16,25])	# x축 값과 y축 값을 맥플롯립의 plot( )함수에 전달
plt.show( )	# show( )함수 사용하여 그래프 출력

2. 산점도 그리기(scatter plot)

- 산점도 : 데이터의 x축, y축 값을 이용하여 점으로 그래프 그린 것

plt.scatter([1,2,3,4,5],[1.4.9.16.25])
plt.show( )

3. 넘파이 배열로 산점도 그리기

 

x=np.random.randn(1000) #표준정규분포 따르는 난수 1000개 만듦
y=np.random.randn(1000) #표준정규분포 따르는 난수 1000개 만듦
plt.scatter(x,y)
plt.show()

구글 코랩 : 구글이 제공하는 주피터 노트북(jupyter notebook)

 

코랩이란?

-웹 브라우저(Web Browser)를 통해 제어하고 실제 파이썬 코드 실행은 구글 클라우드의 가상서버에서 이루어짐

- 노트북(코랩에서 만든 파일)은 구글 드라이브(Google Drive)에 저장하고 불러올 수 있음

- 구글 독스나 구글 스프레드 시트와 비슷한 방식으로 사용할 수 있는 프로그램

 

http://colab.research.google.com/

 

Google Colaboratory

 

colab.research.google.com

 

자주 사용하는 기능 [단축기]

1. 셀 삭제하기 [Ctrl + M D ] 

2. 셀 실행하고 바로 다음 셀로 이동하기 [Shift + Enter]

3. 셀 실행 (다음셀 이동 X) [Ctrl + Enter]

4. 셀 실행하고 바로 아래에 새 셀 삽입하기 [Alt+Enter]

5. 이 외에도 단축기 설정 가능 [Ctrl + M H]

6. 명령어 팔레트 [Ctrl + Shift + P] : 필요한 기능 검색 가능 

인공지능(Artificial Intelligence) : 사람의 지능을 만들기 위한 시스템이나 프로그램

 

1. 강 인공지능(strong AI) - 사람과 구분이 안될 정도로 강한 성능을 가진 인공지능 

2. 약 인공지능 (weak AI) - 특정 영역에서 작업을 수행하는 인공지능

                                - ex.Tesla의 자율주행자동차, 구글의 인공지능 스피커 Google Home,등

                                - 머신러닝, 딥러닝

 

인공지능, 머신러닝, 딥러닝의 관계

머신러닝이란?

 

1. "학습" / "훈련" 을 한다. ( 데이터의 규칙을 컴퓨터 스스로 찾아 수정한다. )

 

   (1) 지도학습(supervised learning)

        (훈련데이터 = 입력 + 타깃) 

        (입력 : 모델이 풀어야 할 일종의 문제 같은 것)

        (타깃 : 모델이 맞춰야 할 정답과 같은 것) 

        (모델 : 학습을 통해 만들어진 프로그램) - 후에 자세히 설명

        입력과 타깃으로 모델을 훈련시킴 (= 문제에 대한 답을 주는 방법으로 모델을 훈련시킴)

        ex. 내일의 날씨 예측, 스팸 이메일 분류, 등

        - 훈련 데이터 생성에 많은 시간 소요

 

   (2) 비지도학습(unsupervised learning)

        타깃이 없는 훈련 데이터 사용

        ex. 군집(clustering) - 기업이 고개의 소비성향에 따라 그룹 지정

        - 모델의 훈련결과를 평가하기 어려움

 

   (3) 강화 학습(reinforcement learning)

        머신러닝 알고리즘으로 에이전트 훈련

        -> 훈련된 에이전트 : 특정 환경에 최적화된 행동 수행, 수행에 대한 '보상'과 '현재상태'를 받음

       에이전트의 목표 "최대한 많은 보상을 받는 것" 

       대표적 알고리즘 : Q-learning, SARSA, Deep Q Network, 등

       ex. DeepMind, AlphaGo, 등과 같은 게임이나 온라인 광고, 등

 

2. 스스로 "규칙"을 찾는다. 

       대부분의 머신러닝 알고리즘은 훈련 데이터와 규칙의 관계를 식으로 표현 가능

       ex. 1.5 * x + 0.1 = y (y가 1 이상이면 A 실행) 

            x는 입력, y는 타깃, 1.5가중치, 0.1 절편 

            규칙 : 가중치(입력과 곱하는 수) & 절편(입력과 더하는 수)

       딥러닝은 많은 (10만, 100만)의 가중치와 절편을 가짐

 

3. 모델은 머신러닝의 수학적 표현

       앞에 예시로 든 수학식이 모델

       모델 : 훈련 데이터로 학습된 머신러닝 알고리즘

       모델 파라미터(model parameter) = 모델 + 가중치 + 절편

 

4. 손실 함수로 모델의 규칙을 수정한다.

        이전에 만든 모델에 새로운 입력과 출력을 넣었을 때 실제 타깃값과 맞지 않은 경우가 생김

        -> 모델의 규칙(가중치, 절편) 을 수정해야함

        손실 함수 (loss function) : 모델의 규칙을 수정하는 기준이 되는 함수

        최적화 알고리즘 : 손실 함수의 최솟값을 효율적으로 찾는 방법

 

딥러닝이란?

-복잡한 문제를 해결하기 위해 인공신경망(artificaial neural network)을 다양하게 쌓은 것

 

1. 딥러닝은 인공신경망으로 구성된다

         인공신경망을 여러 겹 쌓으면 위와 같은 모양이 되는 데 이것이 "딥러닝" 임

         딥러닝 ≠ 사람의 뇌

 

2. 딥러닝은 머신러닝이 처리하기 어려운 데이터를 더 잘 처리한다.

         "처리하는 데이터" - 머신러닝 vs 딥러닝

          머신러닝 : 데이터베이스, 레코드 파일, 엑실/CSV, 등에 담긴 정형 데이터 처리 

          딥러닝 : 이미지/영상, 음성/소리, 텍스트/번역 등의 비정형 데이터 처리 ('인지'와 관련된 문제 해결)

지역 저장소 (local repository): 자신의 컴퓨터에서 작업 한 뒤 그 컴퓨터 안에 커밋 저장한 저장소

 - 단점) 실수로 지역 저장소를 삭제한다면 이때까지 작업했던 내용 증발(안전성 下)

 

원격 저장소 (remote repository): 지역 저장소의 단점을 보완, 지역 저장소가 아닌 컴퓨터나 서버에 만든 저장소

- 깃 : 지역 저장소와 원격저장소를 연결해서 버전 관리하는 파일들을 쉽게 백업가능

- "백업" & "협업"

- 깃허브 多 사용 

 

깃허브(깃 사용을 위한 원격 저장소를 제공하는 서비스)

1. 따로 깃 설치를 하지 않고도 깃의 버전 관리 기능 사용 가능

2. 지역 저장소 백업 가능

3. 협업 프로젝트에 사용 가능

4. 자신의 개발 이력을 남길 수 있음

- 날짜별로 모두 기록이 남음 

- 어떤 주제, 어떤것들을 개발 했는지, 개발중인지 확인 가능

5. 다른 사람의 소스를 살펴볼 수 있고, 오픈소스에 참여 가능

- 개발 실력을 높이는 방법 중 하나 : 다른 사람의 소스를 읽어보고 분석하면서 나름대로 소스 수정 및 작성해보는것

 

깃허브 

www.github.com  

 

Build software better, together

GitHub is where people build software. More than 50 million people use GitHub to discover, fork, and contribute to over 100 million projects.

github.com

가입후 Create repository (오른쪽 위에있는 +버튼을 누르고 [New repository] 선택)

HTTPS 접속 주소 형태

: https://github.com/아이디/저장소명 

 

지역저장소를 원격 저장소에 연결하기 

 

커맨드 라인에서 기존 저장소를 푸시하기 (...push an exisiting repository from the command line)

(1) 만든 깃허브 저장소에 접속 후 주소 복사

(2) 터미널 창에서 연결할 저장소로 이동

(3) $ git remote add origin 복사한주소

     - 원격 저장소(remote)에 origin(깃허브 저장소 주소)을 추가(add)하겠다고 깃에게 알려주는 것

     - 지역 저장소를 특정 원격 저장소에 연결하는 것은 한번만 하면됨!

(4) 원격 저장소에 제대로 연결되었는지 확인

     $ git remote -v 

 

push - 지역저장소에서 원격저장소로 올리는 것

pull - 원격저장소에서 지역 저장소로 내려받는 것

 

원격저장소에 파일 올리기 - git push

1. $ git push -u origin master

   - 지역저장소의 브랜치를 origin(원격 저장소의 master 브랜치)로 푸시하라는 명령

   - -u : 지역 저장소의 브랜치를 원격 저장소의 master 브랜치에 연결하기 위한 것 (한번만 하면됨)

2. 이후에 파일 올릴 때는 

$ git push  만 입력하면 됨

 

원격 저장소에서 파일 내려받기 - git pull

$ git pull origin master 

   - origin(원격 저장소)의 내용을 master 브랜치로 가져온다는 뜻

 

깃허브에 SSH 원격 접속하기

SSH (Secure Shell) : 보안이 강화된 안전한 방법으로 정보를 교환하는 방식

- 기본적으로 private key 와 public key를 한 쌍으로 묶어서 컴퓨터를 인증함

- public key : 외부에 공개되는 키, private key : 아무도 알 수 없게 사용자 컴퓨터에 저장되는 키

(사용자의 컴퓨터에서 SSH 키 생성기를 실행 -> private key, public key 만들어짐)

-> 개인 노트북을 깃허브에 등록해 두면 언제 어디서든 터미널창을 통해 깃허브에 접속 가능

-> 터미널 창에서 깃허브 사용시 (SSH원격 접속을 사용하면 ) 자동로그인 기능을 사용

 

SSH 키 생성하기

1. $ ssh-keygen 입력

 - 파일이름 입력하라는 메시지가 뜨는데 무시하고 enter를 치면  화면에 SSH를 통해서 다른 컴퓨터에 접속할 수 있는 비밀번호가 생성됨 

 - 이 때, Your identification has been saved in ~/id_rsa 부분이 프라이빗 키 경로(id_rsa파일 : 프라이빗키)

 - Your public key has been saved in ~/id_rsa.pub 부분이 퍼블릭 키 경로 (id_rsa.pub파일 : 퍼블릭키)

2. 이 키들이 .ssh디렉터리에 저장되었는지 확인해보기

$ cd ~/.ssh

$ ls -la

 

깃허브에 퍼블릭 키 전송하기

SSH방식으로 접근:  먼저 사용자 컴퓨터에 만들어져 있는 퍼블릭 키를 깃허브 서버로 전송한 다음 저장

1. SSH키 생성 

2. .ssh 디렉터리로 이동

$ cd ~/.ssh 

3. 파일 열어보기

$ cat id_rsa.pub

4. 몇 줄에 걸친 문자열(public 키에 담긴 내용)이 나오는 데 이 문자열 복사

5. 깃허브 접속 후 사용자 아이콘을 누른 후 [Settings]선택

6. [SSH and GPG keys]를 누른후 화면 오른쪽에 나타난 [New SSH key] 선택

7. key 부분에 앞에서 복사한 퍼블릭 키 값 붙여넣기

8. [Add SSH key] 버튼 누르기

 

 

SSH 주소로 원격저장소 연결하기

1. 깃허브 사이트에서 repository를 만들면 HTTPS 주소가 나타나는데 [SSH]를 눌러서 SSH주소 복사

2. 홈디렉터리에 connect-ssh 저장소를 만든 후 해당 디렉터리로 이동

3. $ git remote add origin 복사한주소

 

 

 

Problem. 고객사에 따라 다른 제품, 사용 설명서

 

Solution 1. 처음에 작업했던 저장소 전체를 여러 개 복사해서 각 고객사의 이름을 붙인다음 저장소마다 버전관리를 따로 하는 방법 

 ex) 처음에 작업했던 저장소 : master 각 고객사 : ms, google, apple

but 비효율적!

(1) 자료중복

(2) 고객사마다 디렉터리 이름을 다르게 사용(버전 관리 시스템의 장좀 미이용)

(3) 한 디렉터리의 최신버전코드를 복사해 다른 디렉터리에 붙여 넣고 커밋하는 과정에서 에러가 발생 

 

Solution 2. 브랜치!

 

브랜치 기능작동 순서

1. 깃으로 버전관리를 시작하면 master라는 브랜치 생성

2. 사용자가 커밋할 때마다 master브랜치는 최신 커밋을 가리킴 ( 브랜치 = 커밋을 가리키는 포인터)

3. 새 브랜치 생성 시, 기존에 저장한 파일을 master브랜치에 그대로 유지하면서 기존 파일 내용 수정 및 새로운 기능을 구현할 파일 생성 가능 ("branch(분기)한다")

4. 새브랜치에 있던 파일을 master 브랜치에 합칠 수 있음 ("merge"(병합)한다")

깃에서 브랜치를 만들거나 확인하는 명령

$ git branch

 

새 브랜치 만들기

$ git branch 브랜치이름

 

브랜치 사이 이동하기 ( 다른 브랜치로 이동하기)

$ git checkout 이동하고자하는브랜치이름

 

한 줄에 한 커밋씩 확인

$ git log --oneline

 

한 줄에 한 커밋 씩, 각 브랜치의 커밋 확인

$ git log --oneline --branches

 

한 줄에 한 커밋 씩, 각 브랜치의 커밋, 그래프 형태로 확인

$ git log --oneline --branches --graph

 

브랜치 사이의 차이점 알아보기 (ex. A브랜치와 B브랜치 사이의 차이점)

A에는 없고 B에만 있는 커밋확인 (A를 기준으로 B비교)

$ git log A..B

B에는 없고 A에만 있는 커밋 확인 (B를 기준으로 A비교)

$ git log B..A

 

서로 다른 파일 병합하기 

1. 각 브랜치에 커밋만들기

2. master브랜치로 체크아웃

3. 병합하기

$ git merge 병합할브랜치이름

 cf) 편집기 창을 열지 않고 깃에서 지정하는 커밋 메시지를 그대로 사용하려면

$ git merge 병합할브랜치이름 --no-edit

 cf) 브랜치를 병합할 때 편집기 창이 나타나지 않도록 설정한 경우, 커밋 메시지를 추가 및 수정하려면

$ git merge 병합할브랜치이름 -edit

 

같은 문서의 다른 위치를 수정했을 때 병합하기

-> 문서를 확인 해 보면 수정한 내용들이 합쳐져 있음

 

같은 문서의 같은 위치를 수정했을 때 병합하기

-> git merge 명령을 사용하면 "conflick"메시지가 나타남

-> 문서를 열어 수정해야함 

-> 커밋

이 과정에서 나는 commit을 하지 않아

error: Merging is not possible because you have unmerged files.

hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

라는 에러 메시지가 떴었다. 

 

병합이 끝난 브랜치 삭제하기 (완전히 저장소에서 없애는 것이 아닌 깃의 흐름 속에서 감추는 것)

(같은 이름으로 브랜치를 만들면 예전에 작업했던 내용이 그대로 나타남)

1. master로 checkout하기

2. 병합이 끝난 브랜치 삭제

$ git branch -d 삭제할브랜치이름

위에서 commit을 하지 않은 채로 브랜치를 삭제하려고 시도하니 다음과 같은 에러메시지가 떴다.

error: The branch '삭제할브랜치이름' is not fully merged.
If you are sure you want to delete it, run 'git branch -D 삭제할브랜치이름'.

이때 두가지 해결 방안이 있다. 하나는 해당 파일을 commit하기 나머지 하나는 (git branch -D 삭제할브랜치이름) 입력하기

02-1 깃 저장소 만들기

저장소를 만들고 싶은 디렉터리로 이동해서 깃을 초기화 -> 해당 디렉터리에 있는 파일들을 버전관리 O

 

깃 초기화 하기 - git init

1. 깃 저장소를 만들 디렉터리 생성

홈 디렉터리에 hello-git이라는 디렉터리를 만들고 cd명령을 사용해 해당 디렉터리로 이동

$ mkdir hello-git

$ cd hello-git

2. 깃을 사용할 수 있도록 디렉터리 초기화

$ git init

"Initialized empty Git repository ..."  -> 해당 디렉터리에서 깃 사용 가능

디렉터리 안의 내용을 확인해 보면, '.git'라는 디렉터리가 생성되어있음  ($ ls -la 이용)

'.git' : 깃을 사용하면서 버전이 저장될 저장소(repository)

      cf) .git 디렉터리는 감춰져 있음 (hello-git 디렉터리를 열었을 때 나타나지 않음)

          - 윈도우에서는 [보기]탭에서 '숨긴 항목'을 체크하면 확인 가능

 

02-2 버전만들기

버전 - 프로그램 개발에서 수정내용이 쌓이면 새로 번호를 붙여서 이전 상태와 구별하는 것

 

깃에서 버전이란

- 문서를 수정하고 저장할 때 마다 생기는 것

버전관리 시스템(ex 깃) : 만든 시간과 수정내용까지 기록할 수 있음, 변경 시점마다 저장가능

 

스테이징와 커밋 이해하기

작업트리(Working tree = Working directory)

- 파일 수정, 저장 등의 작업을 하는 디렉터리 (우리 눈에 보이는 디렉터리)

 

스테이지 (Stage = staging area)

- 버전으로 만들 파일이 대기하는 곳

- 작업트리에서 수정한 파일 중 버전으로 만들 파일만 스테이지로 넘겨주기

 

저장소 (Repository)

- 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳

 

작업 트리에서 빔으로 문서 수정하기

1. hello-git 디렉터리까지 이동후 깃 상태 확인

 

$ git status(깃 상태 확인)을 하면 위 그림처럼 3메시지가 나타난다. 

 (1) On branch master : 현재 master branch에 있음 

 (2) No commits yet : 아직 커밋한 파일이 없음

 (3) nothing to commit : 현재 커밋할 파일이 없음

 

2. hello-git 디렉터리에 새로운 파일 만들기

$ vim hello.txt

3. vim 화면이 나타나면 1강에서 배운대로 입력 후 종료

4. 깃 상태를 확인해보면 hello.txt라는 untracked files가 있다는 메시지가 나타난다. 

 - untracked files: 한번도 버전관리하지 않은 파일

 

수정한 파일을 스테이징하기 - git add

1. 스테이징(staging) : 스테이지에 작업트리에서 만들거나 수정한 파일 추가

$ git add hello. txt

2. 깃상태를 확인하면 untracked files: 라는 문구가 changes to be committed 로 바뀜 그리고 new file:이라는 수식어가 추가로 나타나는데 이는 "새 파일 hello.txt를 앞으로 커밋할 것이다"라는 뜻

스테이지에 올라온 파일 커밋하기 - git commit

1. 커밋(commit) : 버전을 만듦

커밋과 함께 저장할 메시지를 적을 수 있는데 메시지에는 그 버전에 어떤 변경 사항이 있었는지 확인하는 용도

$ git commit -m "message1"

2. 버전이 제대로 만들어졋는지 확인

$ git log

방금 커밋한 버전에 대한 설명(커밋을 만든 사람, 만든 시간, 커밋메시지) 이 나타난다. 

 

스테이징과 커밋 한꺼번에 처리하기 - git commit -am

1. vim에서 아까 작성한 hello.txt파일을 열어 파일의 안의 내용을 수정

2. 스테이징과 커밋 한꺼번에 처리

$ git commit -am "message2"

단, 한번 커밋한 파일이어야 한다. 

 

02-3 커밋 내용 확인하기

커밋 기록 자세히 살펴보기 - git log

지금까지 만든 버전이 화면에 나타나고, 각 버전마다 설명도 함께 나타남

변경 사항 확인하기 -git diff

- 최신버전의 파일과 수정한 파일이 어떻게 다른지 확인

 

02-4 버전 만드는 단계마다 파일 상태 알아보기

tracked file 과 untracked file

 cf) 커밋에 관련된 파일 까지 살펴보려면 $git log --stat 입력

 

unmodified, modified, staged 상태

  cf) 방금 커밋한 메시지 수정하기 : $git commit --amend 를 입력하기 -> vim이 켜지면 수정후 저장하면서 종료

 

02-5 작업 되돌리기

작업트리에서 수정한 파일 되돌리기 - git checkout

-파일을 수정한 뒤 소스가 정상적으로 동작하지 않는 등의 이유로 수정한 내용을 취소하고 가장 최신 버전 상태로 되돌리기

$ git checkout -- hello.txt

스테이징 되돌리기 - git reset HEAD 파일이름

-수정된 파일을 스테이징 햇을때, 스테이징 취소

$ git reset HEAD hello.txt

최신 커밋 되돌리기 - git reset HEAD^

-수정된 파일을 스테이징하고 커밋까지 햇을 때, 가장 마지막에 한 커밋 취소

$ git reset HEAD^

- 커밋에 취소되고 스테이지에서도 내려감

 

특정 커밋으로 되돌리기 -git reset 커밋해시

- 특정 버전으로 되돌린 다음 그 이후 버전을 삭제

- git reset A 일때, A커밋을 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제하고 A 커밋으로 이동 

- git log 를 이용해 커밋해시 복사

 $ git reset --hard 복사한커밋해시

 

커밋 삭제하지 않고 되돌리기 - git revert

-나중에 사용할 것을 대비해 커밋을 되돌리더라도 취소한 커밋을 남겨두어야 할때

 $ git revert 복사한커밋해시

 

'Computer Science > git&github' 카테고리의 다른 글

개발자가 오픈소스 읽는 방법  (0) 2022.02.16
기본 Git&Github 협업과정  (0) 2022.02.16
[git & github] 깃허브  (0) 2020.05.18
[git & github] 브랜치  (0) 2020.05.17
[git & github] 깃 시작하기  (0) 2020.05.13

깃이 제공하는 핵심 기능 

1. 버전관리(Version Control) - 언제, 어떤 것을 수정했는지 구체적으로 기록

2. 백업(Backup) - 깃허브와 같은 원격저장소를 사용하여 파일 백업

3. 협업(Collaboration) - 원격저장소를 통해 팀원끼리 공유가 편리

제품군

자동차

깃 

 

제품

자동차 A, 자동차 B...

깃프로그램

 

깃프로그램의 종류

-깃허브 데스크톱, 토터스깃, 소스트리

 

깃 설치하기

나는 윈도우환경에서 실습을 진행하므로 윈도우에 깃설치하는 방법만 필기

 

 https://git-scm.com 사이트에 접속하면 운영체제에 따라 프로그램 다운 가능

위 사이트에 접속하게 되면 아래 그림과 같은 화면이 나오는데 파란색으로 체크한 부분을 클릭하면 된다. 

라이선스 정보 를 확인 한 후에 깃에서 설치할 구성 요소는 기본값으로 설정한다. 

깃에서 사용할 기본 편집기를 Vim으로 선택하고, 

커맨드 라인에서 어떠한 방법으로 깃을 사용할 지 선택한다. 여기서 "Get from the command line and also from 3rd-party software"를 선택한다.

보안 서버에 접속하기 위한 방법으로 "Use the OpenSSL library"를 선택하고 

텍스트 파일에서 줄 끝부분처리방법으로  "Checkout Windows-style, commit Unix-style line endings"을 선택한다. 

터미널 에뮬레이터로 "User Window's default console window"를 선택한다. (윈도우 명령프롬포트 창 사용한다는 뜻)

기타옵션들에 대해서는 기본값으로 설정하고 설치를 진행한다. 

 

설치가 완료되면 윈도우 작업표시줄 검색창에 git 이라 검색하고 검색 결과 중에서 [Git Bash]를 누른다.

 

Git Bash창이 열리면 git입력 후 enter 를 쳐보면 깃 명령에서 사용할 수 있는 여러 옵션이 표시된다. 

 $ git

깃 환경 설정하기

깃은 버전을 저장할 때마다 그 버전을 만든 사용자 정보도 함께 저장하기 때문에 깃 사용 전에 사용자 정보를 입력해야한다.

$ git config --global user.name "Bosun Kwak"

$ git config --global user.email "214kbs@gmail.com"

 

리눅스 명령 연습하기

터미널 창에서의 깃 사용하기 위해 쓰는 명령 = 리눅스 명령

 

현재 디렉터리 살펴보기

1.  깃 배시를 실행한 후 커서 윗줄을 보면 맨 끝에 물결표시(~)가 있는데, 현재 홈 디렉터리에 있다는 의미

 

2. 현재위치 경로 나타내기 

"pwd" 명령 입력 (print working directory 줄임말)

$ pwd


3. 현재 디렉터리에 어떤 파일이나 디렉터리가 있는지 확인할 때

"ls"명령 입력 (list 줄임말)

$ ls

4. (-) 와 함께 옵션을 나타내는 글자 입력 (옵션추가)

$ ls -la "l"옵션 +"a" 옵션
$ ls -a 숨긴 파일과 디렉터리도 함께 표시
$ ls -l 파일이나 디렉터리의 상세정보를 함께 표시
$ ls -r 파일 정렬순서 거꾸로 표시
$ ls -t 파일 작성 시간 순으로 내림차순 표시

 

터미널 창에서 디렉터리 이동하기

"cd"명령을 사용함 ( change directory의 줄임말)

 

1. 현재위치에서 상위 디렉터리로 이동

$ cd ..

나는 이부분에서부터 에러가 생겼다. $ cd.. 을 치고 enter 를 그대로 쳤는데 '/c/Users/0214k' 대신 (bash: cd..: command not found) 가 나왔다. 그래서 당황해서 google 에서도 에러의 원인에 대해 찾아보았는데.. 

$ cd 다음에 띄어쓰기를 안하고 바로 ..를 입력했기 때문이었다.

 

2. 현재위치에서 하위 디렉터리로 이동

현재 /c 디렉터리에 있는데 /c/Users디렉터리로 가려면 다음과 같이 입력

$ cd Users

3. 홈 디렉토리로 이동

$ cd ~

 

리눅스에서 디렉터리를 나타내는 기호

~

현재 접속 중인 사용자의 홈 디렉터리

./

현재 사용자가 작업 중인 디렉터리

../

현재 디렉터리의 상위 디렉터리

 

터미널 창에서 디렉터리 만들기 및 삭제하기

 

1. 현재 디렉터리 안에 하위 디렉터리 만들 때 "mkdir" 명령 사용 (make directory 의 줄임말)

홈 디렉터리 안에있는 Documents 디렉터리에 test라는 하위 디렉터리 만들기

$ cd Documents

$ mkdir test

 

2. 디렉터리 삭제

디렉터리 삭제할 때 "rm"명령 사용 (remove의 줄임말)

디렉터리 안에있는 하위 디렉터리와 파일까지 삭제할 때 "-r"옵션을 붙임

(cf. 삭제하고자 하는 디렉터리의 상위 디렉터리에서 rm명령을 입력해야함)

test 디렉터리 삭제하기

$ rm -r test

 

빔에서 텍스트 문서 만들기 

(test 디렉터리 다시 만든 후 실습 진행)

1. 현재 디렉터리(test directory)에 test.txt 파일을 만들기 위해 "vim"명령 입력

"vim"명령 : 입력한 파일 이름과 같은 파일이 없을 경우 그 이름으로 새로운 텍스트 문서를 생성, 같은 이름의 파일이 있을 경우, 그 파일을 연다.

$ vim test.txt

2. "ex모드" (I 또는 A 입력) -> "입력모드"    (I : insert(삽입) A: add(추가))

   "입력모드" (Esc 입력) -> "ex모드" 

입력모드 - 텍스트 입력 및 수정

ex모드- 저장, 종료, 등

텍스트 입력이 끝나면 ex모드에서 ":wq" 명령을 입력 (w 저장 q 종료)

 

3. 텍스트 문서 내용 확인하기

cat 명령과 텍스트 파일 이름을 함께 입력 (concatenate(연쇄하다)의 줄임말)

$ cat test.txt

 

'Computer Science > git&github' 카테고리의 다른 글

개발자가 오픈소스 읽는 방법  (0) 2022.02.16
기본 Git&Github 협업과정  (0) 2022.02.16
[git & github] 깃허브  (0) 2020.05.18
[git & github] 브랜치  (0) 2020.05.17
[git & github] 깃으로 버전 관리하기  (0) 2020.05.15

+ Recent posts