Data Science/AI

What is Git and GitHub? | 깃, 깃허브 이용법

토마토. 2021. 8. 29. 13:56

참고 : Git and GitHub for Beginners - Crash Course - YouTube


 

⭐️ Contents ⭐️

⌨️ Introduction

⌨️ What is git?

⌨️ What is version control?

⌨️ Terms to be learn in video

⌨️ Git commands

⌨️ sign up in GitHub

⌨️ using git in local machine

⌨️ git install

⌨️ getting code editor

⌨️ inside VS Code

⌨️ cloning through VS Code

⌨️ git commit command

⌨️ git add command

⌨️ committing

⌨️ git push command

⌨️ SSH Keys

⌨️ git push

⌨️ Review workflow so far

⌨️ Compare between GitHub workflow and local git workflow

⌨️ git branching

⌨️ Undoing in git

⌨️ Forking in git

⌨️ Ending


⭐️ 깃(git) & 깃허브(github) 튜토리얼 ⭐️

 

⌨️ What is git?

깃 git이란 오픈 소스 버전 컨트롤 시스템으로

프로그래머들이 가장 많이 사용하는 시스템이다. 

 

나 같은 경우는 

개발자 인스타그램이나 블로그에서 종종 '잔디 심었다'는 표현을 보았다.

나는 그동안 git을

"commit을 해서 버전을 업데이트할 때마다 잔디를 심어주는 것"이라고 이해하고 있었고,

 

나도 잔디를 심고 싶어서 git을 시작하게 되었다. 🌱🌱🌱

 

 

⌨️ 그래서 버전 컨트롤이 무엇인가?

 

버전 컨트롤은 코드가 바뀔 때마다 바뀐 부분을 기록하고 업데이트하는 것을 말한다.

버그가 생겼거나,

이전 버전으로 돌아가야 할 때 아주 유용하게 사용된다.

 

깃허브에서 버전 컨트롤을 아주 깔끔하게 보여주는데

그건 잠시후에 살펴보기로 하자!

 

⌨️ 기초 용어 설명

 

🌱디렉토리 Directory🌱

 

디렉토리(Directory)는 기본적으로 폴더라고 생각하면 편하다.

 

다만, 폴더는 물리적인 디렉토리나 디스크가 아니라

가상 환경에 놓인 것까지를 포함하는 더 넓은 개념이라고 한다. 

 

다이어그램으로 표현하자면, 다음과 같다.

Virtual folders = Folders - Directories

 

cf) shell - What is the difference between a directory and a folder? - Stack Overflow

 

🌱터미널 Terminal or Command Line🌱

텍스트 커멘드를 내리는 곳이다.

여기서 프로그램에 업데이트, 실행, 변경, 설치 등 직접 명령을 내릴 수 있다.

 

나는 터미널을 사용해본 적이 많지 않지만,,

파이썬에서 pip 모듈을 설치할 때, <- 이때는 cmd

데이터 엔지니어링을 배우며 여러 프로그램을 설치, 실행할 때

사용해보았다. <- 이때는 WSL(Window subsystem for linux) - ubuntu 이용

 

🌱CLI Command Line Interface🌱

CLI를 통해서 사용자가 컴퓨터 프로그램과 상호작용할 수 있다.

사용자는 텍스트 커맨드를 내리고, 컴퓨터 역시 문자열 형태로 출력한다.

 

-> 으음..... shell, bash, wsl, cmd... 이게 다 뭐지? <-

 

🌱 cd 🌱

cd는 Change Directory라는 뜻의 명령어로

하위 폴더로 내려가자라고 할 때는 cd [하위 폴더 이름]

다시 상위 폴더로 돌아갈 때는 cd ..

를 사용하면 된다.

 

🌱 리포지토리 Repository 🌱

기본적으로 리포지토리는 프로젝트를 의미한다.

프로젝트의 내용물이 저장되는 폴더, 장소를 지칭한다.

이때 Github는 리포지토리를 저장하는 웹사이트다.

 

 

⌨️ Git commands

 

🌱 clone 🌱

사실 이 글의 최종 목적지는 ... 도커 컴포즈 실습이다..!

나는 아래 사이트에서 도커 실습을 해보려고 했는데, 여기서 

git clone https://gitlab.com/yalco/practice-docker.git

이 명령어를 이용하여 파일을 다운 받으라고 했다.

 

이때 이 clone 은

github 같은 곳에 올린 리포지토리를 내 로컬 PC로 가져오는 명령어다.

 

가장 쉽게 배우는 도커 | 얄코 (yalco.kr)

 

🌱 add 🌱

파일에 변화가 생기는 것을 탐색하는 명령어다.

 

🌱 commit 🌱

파일을 깃에 저장한다.

 

🌱 push 🌱

Github와 같은 곳에 있는 리포지토리에 깃 커밋을 업로드한다.

 

🌱 pull 🌱

push 명령어와 반대 동작을 수행한다. 

외부 리포지토리에 저장된 깃 커밋(changes)를 로컬 머신에 다운 받는다.

 


⌨️ Github 입문 :D

 

github에 가입하고

내 파일에서 create repository를 하면, 프로젝트를 생성할 수 있다.

 

보통 첫 페이지에 프로젝트를 줄글로 설명하는 README.md 파일을 생성한다.

.md는 markdown 확장자이고

jupyter 노트북에서 사용하듯이

#으로 글씨를 키우고, $$ 사이에 수식을 작성하면 된다. 

 

 

README.md 파일을 편집한 후에 github 페이지에서 commit 버튼을 누르면,

파일을 생성하고 수정한 기록이 남는다.

각 commit에는 사용자가 작성한 커밋의 제목 /

부연설명, 고유 번호가 저장된다. 

 

커밋 하나를 누르면

삭제 / 추가 사항이 잘 보인다.

흰 색 : 그대로 / 빨간 색 : 없앰 (-) / 초록 색 : 더함 (+)

 


⌨️ using git in local machine

 

나는 git을 아래 사이트 window 버전으로 (기본값 따라서) 설치했다.

Git - Git 설치 (git-scm.com)

 

 

>>> 그런데... ? <<<

나는 분명 window로 설치했는데, 

WSL ubuntu에도 git이 있었다.

(다른 버전으로...?)

 

왜 있는지는 모르겠지만..

나중에는 WSL이 편해서 그걸로 썼다.

 

 

⌨️ git 실습 1

 

🌱step 1. clone🌱

github에서 repository를 가져온다!

 

🌱step 2. 편집🌱

local git에서 파일들을 편집한다!

 

🌱step 3. add / commit / push🌱

local git에서 변경한 사항들을

업데이트하고 add

저장하고 commit

업로드한다 push !!!

 

 

🌱step 1. clone🌱

 

(1)

IDE에서 폴더를 연다.

 

나는 Visual Studio에서

C:\Users\82109\Source\Repos\practice-docker 폴더를 열었다.

visual studio 기준

(2)

그 다음, IDE에서 터미널을 열고,

 

(3)

git 외부 폴더를 clone해 온다.

초록색 code 버튼을 누르면, 리포지토리 주소를 복사할 수 있다.

 

해당 주소를 복사해서 터미널에

git clone [주소]를 입력해준다.

$ git clone https://github.com/tomatozoo/docker_practice.git

 

여기까지 했더니

 

practice-docker라는 폴더 내부에 docker_practice라는 리포지토리가 저장되었다.

 

cd [리포지토리 이름]을 통해 내부로 이동한다. 

$ cd docker_practice

 

 

(4)

해당 디렉토리 안에 있는 모든 파일을 확인하기 위해

ls -la 명령어를 사용한다.

그런데 cmd에서는 잘 안된다고 해서 WSL를 열었다.

$ wsl

 

docker_practice 리포지토리 내부에폴더(형광펜 칠해진 부분)랑 파일(README.md)가 있다는 것을 확인할 수 있다.

 

 

 

🌱step 2. 편집🌱

local git에서 파일들을 편집한다!

 

(1)

생성

docker_practice 폴더 내부에 docker.py라는 빈 파일을 생성했다.

-> 새로운 파일을 만들었다는 게 포인트!

 

터미널에 git status 명령어를 입력하여 상태를 확인한다.

$ git status

...

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        docker.py

docker.py라는 파일은 새로 만든 것이어서

git에서 인식할 수 있도록 만들어주어야 한다.

-> git add 명령어 이용

 

🌱step 3. add / commit / push🌱

local git에서 변경한 사항들을

업데이트하고 add

저장하고 commit

업로드한다 push !!!

 

⌨️ git add command

 

git add는 변화를 탐지하는 명령어이다.

모든 파일을 탐색하기 위해서는 1)

특정 파일을 추가하기 위해서는 2)

를 이용한다. 

 

1) 모든 파일을 추가한다 : ~ .

 

$ git add .

2) 특정 파일을 지정하여 추가한다 : ~ 파일명

$ git add docker.py

...

tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/docker_practice$ git add .

git add . 로 업데이트를 시킨 다음

tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/docker_practice$ git status

git status로 상태를 확인한다. 

 

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md
        new file:   docker.py

이제 git에서 docker.py를 새로 생성된 파일로 인식한다.

 

⌨️ committing

 

git commit 명령어를 통해 누가 / 무엇을 / 어떻게 수정했는지 저장한다.

$ git commit -m "what and why(title)" -m "description - details"

$ git commit -m "" -m ""에서

-m 은 메시지를 의미한다.

첫 문자열에는 title, 두번째 문자열에는 추가적인 설명을 적는다.

 

>> 만약에 여기서 <<

계정 정보를 입력하라는 경고가 뜨는 경우!

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for <tomato@DESKTOP-IP2MBOJ.localdomain>) not allowed

 

시키는 대로 사용자 이름과 이메일을 입력해주면 된다.

$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"

 

 

⌨️ SSH Keys

보안을 위한 장치

 

암호를 만들었다가 다시 없애보았다.

 

step 1. 암호 만들기

 

tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/docker_practice$ ssh-keygen

 

github에서 가져온 리포지토리(docker_practice)에서

ssh-keygen (ssh key generator) 명령어를 실행시킨다.

 

Enter file in which to save the key (/home/tomato/.ssh/id_rsa): keyname
Created directory '/home/tomato/.ssh'.

 

그 다음, key 이름을 입력한다.

 

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tomato/.ssh/id_rsa
Your public key has been saved in /home/tomato/.ssh/id_rsa.pub
The key fingerprint is:
The key's randomart image is:

 

비밀번호를 설정하고

엔터 몇 번 누르면 끄읕~

 

step 2. 암호 삭제하기

암호를 삭제한다기보다는, 

암호를 저장한 곳으로 돌아가서

암호를 엔터로 바꿔주는 과정이다.

 

 

tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/docker_practice$ cd ~/.ssh

암호가 저장된 곳으로 이동~

 

tomato@DESKTOP-IP2MBOJ:~/.ssh$ ssh-keygen -f id_rsa -p
Enter old passphrase:
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

해서 ssh-keygen -f id_rsa -p 명령어를 입력한 뒤에

이번에는 비밀번호를 입력하지 않은 채로 엔터를 누른다. 

그러면 비밀번호가 없어진다

 

⌨️ git push command

github에 업로드하기 위해서git push 명령어를 사용한다.

 

tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/docker_practice$ git push
Username for 'https://github.com': tomatozoo
Password for 'https://tomatozoo@github.com':

만약에 github용 토큰이 없다면

GitHub 토큰 인증 로그인: Personal Access Token 생성 및 사용 방법 (tistory.com)

이 사이트를 참고하면 된다.

 

짠~

다시 깃허브에 들어가면, 코드가 바뀐 것을 확인할 수 있다.

 

⌨️ git 실습 2

 

🌱🌱🌱🌱🌱

- 로컬 환경에서 폴더 생성 + 업로드하기 -

 

 

 

step 1.

아까 작업하던 리포지토리(docker_practice)와는 분리된 곳에 새로운 폴더를 생성한다.

$ cd ../[폴더이름]

그리고 해당 폴더로 이동한다. 

 

 

step 2.

 

 

github 페이지에서 create new repository를 통해 빈 폴더를 만들어준다.

 

step 3.

깃허브 리포지토리 주소를 복사한 뒤에

터미널로 돌아온다. 

 

tomato$ git remote add origin https://github.com/tomatozoo/new_folder_practice.git

 

git remote add origin [복사한 주소]명령어로 음... 업로드할 곳을 정해두고

 

실습 1과 같이

파일을 편집한 뒤에

git add, commit을 거쳐..

tomato$ git push --set-upstream origin master
Username for 'https://github.com': tomatozoo
Password for 'https://tomatozoo@github.com':

github에 업로드한다.

 

⌨️ 요약하자면?

 

🌱 github 사이트에서는 ! 🌱

 

step 1. 코드 작성

 

step 2. 커밋 버튼 누르기

 

step 3. make a pull request

(아직 안해봄~)

 

🌱 로컬 git에서는 ! 🌱

 

step 1. 코드 작성

 

step 2. git add - 상태 업데이트

 

step 3. 커밋 - 저장

 

step 4. git push - 업로드

 

step 5. make a pull request

 

 

⌨️ git branching

Git and GitHub for Beginners - Crash Course - YouTube

 

git branching은

버전 관리에 유용하다. 

 

new feature를 만들 때 아직 완성되지 않은 경우,

메인에서 분리해서 샌드박스 식으로 연습해볼 수 있다. 

 

나중에 안전할 때 merge하면 된다. 

 

버그가 생긴 경우에도 hot fix branch를 통해 버전관리할 수 있다.