버전 관리 시스템(Vesion control System)

 

텍스트 에디터를 종료한 이후에 다시 들어가서 실수를 고칠 방법이 없음

☞ 이전에 작성했던 내용을 보존해 주는 시스템 (버전 관리 시스템)

 

스냅샷: 특정 시점에 생성된 백업 복사본

commit: 하나하나 스냅샷을 만들어 주는 작업

 

 

버전 관리를 사용하는 이유

  • 파일 변경 이력을 저장할 수 있음
  • 이전 버전으로 돌아갈 수 있음
  • 어떤 변경 사항이 있는지 알아보기 쉬움
  • 협업에 편리
  • 백업용

 

 

Git

 

Git 은 강력한 버전 관리 시스템

버전 관리와 협업 시스템

실제로 실무에서 많이 사용

분산형 버전 관리 시스템

코드 뿐만 아니라 텍스트 파일의 변경점도 하이라이트로 한눈에 볼 수 있음

 

 

 

 

Github

 

  ▷ Git Repository(저장소)를 관리할 수 있는 클라우드 기반 서비스

  ▷ Git Repository: Git으로 관리되는 폴더

  ▷ Git으로 버전을 관리하는 폴더에 대해서 Github를 통해 여러 사람들이 공유하고 접근할 수 있음

  ▷ 개발자들의 SNS

  ▷ 깃허브에서 code review 등을 통해 협업이 가능

  ▷ 수많은 오픈 소스 프로젝트들 호스팅

  ▷ 오픈 소스는 누구나 자유롭게 기능 추가 개선 ☞ 기여(contribute)라고 함

 

 

 

Git Repository

 

Remote Repository와 Local Repository 제공

로컬 저장소에서 작업한 소스를 원격 저장소에 올림

 

 

contribute하기

 

기여할 원격 저장소를 내 원격 저장소로 가지고 와야함 (Fork)

로컬 저장소로 코드를 옮겨옴 (Clone)

변경된 내용을 commit을 통해 저장해주고 원격 저장소에 반대로 올려주는 작업 (Push)

Pull request : 내가 제안한 코드 변경사항에 대해 반영 여부를 요청

Pull : 원격 저장소에서 변경사항이 있을 때 로컬 저장소로 가져오는 작업

 

 

 

Git 설치하기

 

Mac: 터미널에서 git 입력하면 자동으로 설치됨

Windows: https://gitforwindows.org 에서 설치

Ubuntu: 터미널에서 sudo apt install git 입력하면 설치됨

 

git --version 으로 설치한 깃 버전 확인

 

 

 

 

Git 환경설정

 

 

사용자 정보 등록

 

git config --global user.name "나의 사용자 이름"

git config --global user.email "내 이메일 주소"

 

 

 

Git의 에디터

Git에서 commit 기록할 때 (merge commit 확인 메시지가 나올 때) 텍스트 에디터 열림

기본값 vi로 설정되있는데 편의성을 위해 nano로 변경하기

 

git config --global core.editor nano

 

 

 

참고)깃 최초 설정

https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95

 

 

 

 

SSH 등록

 

 

SSH 란?

  • Secure shell의 약자
  • 보안이 강화된 shell 접속을 뜻함
  • CLI 환경에서 다른 PC에 접속하거나 요청할 때 사용
  • 비대칭키를 이용해 사용자 인증
  • 터미널에서 SSH를 이용해 git clone 할 수 있음

 

 

터미널에서 ssh키 생성하기

 

ssh-keygen

경로 ~/.ssh/ 에 두 파일 id_rsaid_rsa.pub 생성

id rsa.pub는 공개해도 되는 공개키(public key)

id_rsa는 공개되면 안되고 보관하고 있어야 하는 키(private key, secret key)

 

 

 

public key를 github에 등록하기

 

터미널에 cat ~/.ssh/id_rsa.pub 입력하고 출력된 공개키 복사

 

깃허브 → 우측 상단에 프로필 클릭 → Settings → 왼쪽에서 SSH and GPG keys 선택 → New SSH Key 클릭

→ title 작성하고 Key 박스에 붙여넣기 → Add SSH key → 깃허브 계정 비번 입력

 

여기까지 마쳐야 git clone이 정상적으로 된다.

 

 

CLI 사용을 위한 인증 방법

 

OAuth (Device Authorization) 인증 방법 이용

GitHub CLI 설치

☞ macOS는 homebrew 설치 후 명령어 brew install gh 입력

 

gh auth login 명령어를 통해 로그인 시도

아래 항목들 선택 후 엔터키

What accout do you want to log into? ☞ GitHub.com

What is your preferred protocol for Git Operations? HTTPS

Authenticate Git with your GitHub credentials? Yes

How would you like to authenticate GitHub CLI? Login with a web browser

 

잘못 선택한 경우 Ctrl + C (^ + C) 를 눌러 중단할 수 있음

 

Login with a web browser 옵션 선택하면 one-time code 화면에 나옴

코드 복사 → Enter 키 → Device Activation 창에 코드 입력 → 인증 완료!

 

 

 

Git repository workflow

 

 

 

 

Fork

깃허브에서 다른 계정의 Remote Repository를 내 Remote Repository로 가지고 오기 (Fork)

Fork 버튼 클릭

 

 

git clone

터미널에서 작업을 원하는 폴더 내에서 git clone [repository 주소]

내 컴퓨터(Local Repository)로 가져와짐

 

 

git status

gjit status 명령어로 현재 staging area와 untracked files 목록에 어떤 것들이 있는지 확인

수정된 파일은 modified라고 되어있음

충돌 시 어떤 파일이 충돌했는지 확인 가능

 

 

git add

git status로 출력한 화면에서 modified(변경된 상태) 이지만 changes not staged 인 파일은 git add 명령어로 staging area에 올려줌

git add [파일이름]

git add .  ☞ 폴더 내의 모든 파일 한 번에 staging area로 올림

Staging area 란? Repository에 올라가기 전에 commit 하기 위해 거치는 단계

Staging are에 올린 후 파일을 수정하면? modified 된 파일을 git add 명령어로 다시 Staging area에 올려줘야 함

 

 

git restore

Local Repository에서 작업한 내용을 모두 취소하고 clone 받았던 상태로 되돌리는 명령어

commit 되지 않은 Local Repository의 변경 사항을 폐기

git restore [파일이름]

 

 

git commit

git add 로 staging area에 올라간 파일은 commit 가능

commit 할 때 옵션 -m 을 통해 간단한 메모 가능 (날짜, 변경자, 버전 변경 기록 등)

git commit -m '메시지'

충돌 후 merge 한 commit을 자동으로 올릴 때 명령어 git commit 입력함

 

좋은 commit 메시지를 작성하기 위해 참고할만한 링크

https://cbea.ms/git-commit/

 

How to Write a Git Commit Message

Commit messages matter. Here's how to write them well.

cbea.ms

 

 

git reset

아직 Remote Repository에 올라가지 않은 commit을 취소하는 명령어

git reset HEAD^ / git reset HEAD~1 : 가장 최신의 commit을 취소

HEAD : 현재 branch를 가리키는 포인터, 현재 branch에 마지막 commit의 스냅샷

 

git reset --hardgit reset --soft 의 차이

 

git reset --hard / git reset --soft

hard는 Staging area까지 비우기 때문에 신중하게 써야함!

 

git reset 더 알아보기

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0

 

Git - Reset 명확히 알고 가기

지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한

git-scm.com

 

 

git push

Local Repository에 저장되어 있는 commit 기록들을 내 Remote Repository에 업로드

git push [저장소명] [브랜치명]

 

 

git log

현재까지 commit 된 내역들을 터미널 창에서 확인하는 명령어

q 입력하면 종료됨

 

 

Pull Request

내 Remote Repository에 Push 해놓은 변경 사항에 대해서 함께 작업하는 다른 사람들에게 알리는 것

줄여서 PR이라고 함

Push 한 후에 내 Remote Repository에 가면 Pull Request 할 수 있는 버튼 생김

 

 

git init

내 컴퓨터에 존재하는 디렉토리를 Git의 관리하에 들어가게 만들어주는 명령어

Git Repository로 변환

새로운 Repository를 초기화 할 때도 사용

 

 

git remote

현재 저장소의 모든 리모트 저장소를 조회

 

git remote add [저장소 이름] [Remote Repository 주소] 

  ☞ Local Repository를 Remote Repository에 연결, 다른 사람의 Remote Repository와도 연결 가능

 

git remote -v

  ☞ 현재 Local Repository와 연결된 모든 Remote Repository 목록 확인

 

 

git pull

git pull [저장소명] [브랜치명]

Remote Repository에 있는 작업내용을 불러옴

받아온 내용은 자동 병합(merge) 됨

 

 

충돌

동시에 같은 부분을 변경하고 push 하면 충돌이 발생할 수 있음 → 보통은 자동 병합(merge)되지만 실패하는 경우도 있음

터미널에 Merge conflict가 발생해서 Automatic merge에 실패했다고 메시지 뜸

충돌한 파일을 수정 완료 했다면 stagining area에 파일 추가

충돌 해결후 staging area에 올리면 자동으로 commit 메시지가 생성됨 (그대로 사용하거나 수정 가능)

Remote Repository에 다시 업로드