github (2)

 

 

 

프로젝트 처음으로 해보면서 Github의 다양한 기능을 공부하게 된 것 같다..

깃허브로 협업을 하다보면 Pull Request에서 머지 전략을 선택할 수 있도록 되있는 것을 볼 수 있다.

깃허브에서 pull request를 merge 할 때 총 3가지의 방법중 선택할 수 있다.

머지 전략은 각 브랜치 전략에 맞춰서 사용하면 된다.

 

 

Merge Commit

흔히 잘 알고있는 merge 전략이다.

기존 브랜치의 모든 commit을 그대로 붙이고 merge commit 까지 남기는 방식이다.

A 브랜치에서 B 브랜치로 PR을 해서 Merge Commit 전략으로 Merge 한다고 생각해보자.

그러면 아래와 같이 commit이 남을 것이다.

A branch : commit1 -> commit2 -> commit3

B branch : commit1 -> commit2 -> commit3 -> Merge pull request #번호 ~~

이런 식으로 merge된 B브랜치에 A브랜치의 commit 내역 + merge 됐다는 commit 까지 같이 남는다.

 

 

Squash and Merge

이건 commit을 모두 하나로 뭉쳐서 commit 1개만 남기는 전략이다.

예를 들어 A 브랜치에서 B 브랜치로 올린 PR을 'Squash and Merge' 전략으로 merge 한다고 하면 아래와 같이 남는다.

A branch : commit1 -> commit2 -> commit3

B branch : commit

A 브랜치의 커밋 내용들을 모두 하나로 뭉쳐서 commit을 하나만 남기는 전략이다.

커밋의 타이틀에 원하는 커밋 내용을 쓸 수 있고 body에는 자동으로 commit 내역이 붙는다.

Squash Merge 후 commit 내용

'Update README.md' 라는 내용의 커밋을 3개 남긴 후에 Squash Merge한 내용이다.

커밋 내용은 원하는대로 바꿔쓸 수 있다.

그리고 merge 커밋의 body에 자동으로 병합 전 커밋 내용이 나와있는 것을 볼 수 있다.

 

 

Rebase and Merge

이건 아예 rebase 하는 전략이다.

브랜치 pull 이나 push할 때 config에서 rebase를 설정하거나 옵션으로 rebase를 줄 수 있다.

Rebase and merge 전략도 그 rebase와 비슷하다.

이 전략을 이용하면 merge commit 없이 commit을 그대로 붙여놓을 수 있다.

이번에도 A 브랜치와 B 브랜치로 예시를 들어봤다.

A branch : commit1 -> commit2 -> commit3

B branch : commit1 -> commit2 -> commit3

이런식으로 A 브랜치가 B 브랜치의 부모 브랜치가 되고 merge commit이 붙지 않는 것을 볼 수 있다.

 

 

 

우리 팀에서는 feature 브랜치에서 dev 브랜치로 merge 할 때는 되도록이면 commit을 다 남겨놓기 위해 'Merge Commit'을 사용하기로 했고

dev에서 main 브랜치로 merge 할 때는 'Squash and Merge'를 사용하기로 했다.

어떻게 merge commit을 남길 것인지에 따라서 merge 전략을 골라서 사용하면 된다!

 

 

 

읽어주셔서 감사합니다. 😍

오개념에 대한 지적은 언제나 환영입니다! 

'GIT' 카테고리의 다른 글

[GIT] 협업할 때 유용한 명령어 (CLI 명령어)  (0) 2022.09.05

 

 

 

버전 관리 시스템(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에 다시 업로드

 

 

1