[얄팍한 코딩사전]Github 사용법

송철진·2022년 10월 14일
0

0. 개요

  • github 실질적인 사용법을 알아보자
  • Mac을 기준으로 작성
  • 10.14 하나하나 다 기록하기엔 너무 많은 양이었다..
  • 참조: https://www.yalco.kr/@git-github/1-3/

1. git 환경구성

  • VCS(Version Control System)
  • 프로그램의 버전관리용 툴

1-1. homebrew 설치

Mac에서 프로그래밍할 때 사용하는 패키지,라이브러리 설치할 때 씀

1-2. git 설치

Mac에는 기본적으로 설치되어 있다

터미널 명령어
버전 확인 : git --version
설치 : brew install git

최신버전 확인: https://git-scm.com/
👉 최신버전 2.38.0이라길래 다시 설치해봤는데 여전히 2.37.0이란다 왜?

1-3. 소스트리

git을 gui로 다룰 수 있게 하는 툴
설치: https://www.sourcetreeapp.com/

1-4. vscode

ctrl + shift + ` 를 입력하면 터미널을 열 수 있음

1-5. iTerm2

설치: https://iterm2.com/
권장 설정: https://www.yalco.kr/_03_mac_terminal/
터미널 꾸미기 관련

단축키 정리

ITerm2

  • Preference 열기 : cmd + ,

Vscode

  • 환경설정 열기: cmd + ,
  • 터미널 열기: Ctrl + Shift + `

Mac

  • 숨김파일 보기/해제: cmd + Shift + .

Command Line Interface vs Graphical User Interface

  • cli: iterm2 - 명령하기
  • gui: 소스트리 - 시각적으로 상태 확인

2. git 설정 & 프로젝트 관리

2-1. 최초 설정

  • github계정과 별개.
  • 전역설정이며 협업 시 누가 했는지, 연락처 공유 등 용도
  • 프로젝트 별로 다르게 설정할 수 있음(나중에~)
  • 기본 브랜치명 변경(master → main)

2-2. git이 관리하도록 설정

2-2-1. CLI

  1. 최상위 폴더 생성해서 vscode로 열기
  2. 초기화: git init
  • 숨김폴더.git에 관리 내역이 저장됨(시간과 차원을 넘나들기 위함)
  • Mac 숨김파일 보기/해제: cmd + Shift + .
  1. 파일 생성
  2. git상태 확인: git status

2-2-2. GUI

  1. 로컬 저장소 생성
  2. 최상위 폴더 선택, 생성하기
  3. 삭제할 때는 북마크 제거

2-3. git 관리에서 배제하기

  1. .gitignore 파일을 생성
  2. 파일에 배제하려는 파일명 작성 & 저장
  3. git status로 결과 확인 - (secrets.yaml이 git관리에서 배제됨)
  • U는 Untracked(추적하지 않는); git관리에 들어가지 않음
  1. 그외 형식: https://git-scm.com/docs/gitignore 참조
  • 주석: #
  • 파일명 배제: 파일명.확장자
  • 최상위 폴더의 파일명 배제: /파일명.확장자
  • 특정 폴더 안의 파일명 배제: /(특정 폴더)/파일명.확장자
  • 모든 특정 확장자 파일 배제: *.확장자
  • 모든 특정 확장자 파일 중 배제하지 않는 것: !not_ignore_this.확장자
  • 특정이름의 파일, 폴더 및 내용들 배제: 특정이름
  • 특정이름의 폴더 및 내용들 배제: 특정이름/
  • 특정이름의 폴더 안 특정파일 배제: 특정이름/파일명.확장자
  • 특정이름의 폴더 안의...안 특정파일 배제: 특정이름/**/파일명.확장자

3. 버전 관리

3-1. 추가하기

  • 하나: git add 파일명.확장자 👉 버전별로 지정해서 추가하기 위함!
    모두: git add .

3-2. 버전 만들기

  • vim입력모드 진입: git commit
    • insert 모드: i
    • insert 모드 나가기: ESC
    • 저장없이 종료, 입력값 없을 때: :q
    • 저장없이 종료, 입력값 있을 때::q!
    • 저장 후 종료: :wq
    • 위로 스크롤: k
    • 아래로 스크롤: j
  • 커밋 메시지까지 작성: git commit -m "FIRST COMMIT"
  • 확인 & 나가기: git log :q

(예제) FIRST COMMIT입력, 저장 후 종료

3-3. 변경 후 버전 관리

  1. 파일 추가, 삭제, 내용 변경
  • M: Modified 변경된
    U: Untracked 버전관리 중이 아닌
  • 상태 확인: git status
  • 상세한 변경내용 확인: git diff
    • 위/아래로 스크롤: k / j
    • 나가기: :q

  1. 버전관리 추가 & 상태 확인: git add . & git status
  2. 버전 관리 메시지 추가 git commit -m "Replace Lions with Leopards"
    👉 새로 추가한 파일이 없을 때 git add . 없이 바로 사용

(예제) 결과:

3-4. reset vs revert

3-4-1. reset

: 원하는 시점으로 돌아간 뒤 이후 내역들을 지웁니다.

  • (예제 1)
  1. 커밋 내역 확인(해시 복사): git log
  2. 과거로 돌아가기: git reset --hard (돌아갈 커밋 해시)

    HEAD ?

  • (예제 2) .git폴더의 동작 원리에 대해 알아보자
  1. FIRST COMMIT으로 reset한 .git 폴더를 삭제
  2. 미리 백업해둔 .git 폴더를 test01폴더 안으로 이동
  3. git status: git관리 중이 아니라고 인식된다.
  4. git reset --hard: 해시가 없으면 마지막 commit상태로 되돌림. (lions.yaml은 삭제한다)

3-4-2. revert

: 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다.

  • (예제) Add George to Tigers 로 revert하시오
  1. 해시 구하기: git log

  2. revert: git revert (되돌릴 커밋 해시)

  3. 저장 & 닫기: :wq

  4. 소스트리

(예제) Replace Lions with Leopards 로 되돌리기

  • 두 커밋의 충돌 이슈
    • 커밋 "Replace Lions with Leopards"의 revert
      : leopards 삭제, lions 추가, tigers수정됨
    • 커밋 "Replace Cheetos with Partners"
      : leopards 수정, ...
    • hint: leopards가 삭제되지 않고 남아있으므로 add/rm 를 ~하라
    • git rm leopards.yaml 👉 git revert --continue 👉 :wq
  • 결과:

(예제) revert하기 전으로 reset하시오
git log 👉 해시
git reset --hard (해시)

(예제) 커밋하지 않고 "Add George to Tigers"로 revert하시오
git log 👉 해시
git revert --no-commit (되돌릴 커밋 해시)

  • 되돌리기 후 추가 작업하고 나서 커밋하고 싶을 때 사용
  • 커밋되지 않은 상태에서 다 지우고 마지막 커밋상태로 돌아가기
    : git reset --hard

3-5. 소스트리

4. Branch

  • 프로젝트를 하나 이상의 모습으로 관리 시: 실배포용, 테스트서버용, 새로운 시도용
  • 여러 작업들이 독립적 진행 시: 신기능 n, 코드개선, 긴급수정...
    • 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합
  • 이 모든 것을 하나의 프로젝트 폴더에서 진행할 수 있도록!

4-1. 여러 Branch 만들기

4-1-1. 생성/삭제/이동

  • 브랜치 생성: git branch (브랜치 이름)

  • 브랜치 목록 확인: git branch 👉 닫기 q

  • 브랜치 이동: git switch (브랜치 이름)

    checkout 명령어가 Git 2.23 버전부터 switch, restore로 분리

  • 브랜치 생성 & 이동: git switch -c (브랜치 이름)

  • 브랜치 삭제: git branch -d (삭제할 브랜치 이름)

    지울 브랜치에 다른 브랜치에 적용되지 않는 내용의 커밋이 있을 시 강제 삭제
    : git branch -D (삭제할 브랜치 이름)

  • 브랜치 이름 수정: git branch -m (수정 전 브랜치 이름) (수정 후 브랜치 이름)

  • 전체 브랜치 로그 확인: git log --all --decorate --oneline --graph

4-2. Branch 합치기

4-2-1. Merge

Merge: 두 브랜치를 한 커밋에 이어붙입니다.

  • 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.
  • 다른 형태의 merge에 대해서도 이후 다루게 될 것입니다.

  • (예제) add-coach 브랜치를 main 브랜치로 merge하시오
  1. main브랜치로 이동: git switch main

  2. 병합: git merge add-coach

  3. 자동입력된 커밋 메시지 저장 & 닫기: :wq

  4. 소스트리 확인

  5. * merge 전 해당 브랜치 마지막 시점으로 리셋:

  6. * 병합된 브랜치 삭제: git branch -d add-coach


4-2-2. Rebase

: 브랜치를 다른 브랜치에 이어붙입니다.

  • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다.
  • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다.

  • (예제) new-teams 브랜치를 main 브랜치로 rebase하시오
  1. new-teams브랜치로 이동: git switch new-teams

  2. 병합: git rebase main

  3. 소스트리 확인

  4. main브랜치로 이동: git switch main

  5. main브랜치의 시점을 new-teams브랜치 시점으로 fast-forward: git merge new-teams

  6. new-teams브랜치 삭제: git branch -d new-teams

4-3. 충돌 해결하기

4-3-1. Merge 충돌 해결하기

  1. 상황: 파일의 같은 위치에 다른 내용이 입력되었을 때
  2. 클릭 또는 직접 입력하여 충돌부분을 수정
    * 병합 취소: git merge --abort
  3. git add . 👉 git commit 👉 :wq

4-3-2. Rebase 충돌 해결하기

  1. 상황: 파일의 같은 위치에 다른 내용이 입력되었을 때
  2. 클릭 또는 직접 입력하여 충돌부분을 수정, 저장:
    * 병합 취소: git rebase --abort
  3. 리베이스 충돌 해결 시, 건 당 git add . 👉 git rebase --continue 반복 👉 :wq
  4. git switch main 👉 git merge conflict-2
  5. git branch -d conflict-2

4-4. 소스트리

참조: https://www.yalco.kr/@git-github/3-5/

5. github사용

5-1. 시작하기

https://www.yalco.kr/@git-github/4-2/

문제점: 키체인 접근 앱에서 github.com을 찾을 수 없음
해결: 👉참조링크
1. github cli 설치: brew install gh 👉https(엔터) 👉 Y
2. GCM 설치: brew tap microsoft/git 👉 brew install --cask git-credential-manager-core 👉 맥북 로그인 password 입력
3. 키체인 접근 앱에서 github.com 더블클릭 👉 암호보기 체크 👉 맥북 로그인 password 입력 👉 복사해둔 토큰 입력

소스트리 설정: cmd + , 👉 추가 👉 github, 베이직, (계정명), (토큰), https 👉 저장

협업할 팀원 추가: repository 생성 👉 settings 👉 collaborators 👉 add people

5-2. 원격 저장소

https 선택 👉 push ...(아래) 을 복사 👉 터미널 입력

git remote add origin (원격저장소 주소)
: 로컬의 Git 저장소에 원격 저장소로의 연결 추가(origin은 다른 걸로 수정 가능)

git branch -M main
: 기본 브랜치명을 main으로

git push -u origin main
: 로컬 저장소의 커밋 내역들 원격으로 push(업로드)
( -u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결)

원격 목록보기: git remote
자세히 보기: git remote -v
원격 지우기(로컬 프로젝트와의 연결만 없앰. GitHub의 레포지토리는 지워지지 않음)
: git remote remove (origin 등 원격 이름)

git 프로젝트 다운받기(협업): Code 👉 https copy 👉 vscode: Ctrl + Shift + `, paste

5-3. push, pull

원격으로 커밋 밀어올리기: git push

  • 이미 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능

원격으로 커밋 당겨오기: git pull

pull할 것이 있을 때 push하면?

push 해보기

  • 원격에 먼저 적용된 새 버전이 있으므로 적용 불가
  • pull 해서 원격의 버전을 받아온 다음 push 가능

push 할 것이 있을 시 pull 하는 두 가지 방법
유튜브 링크

  • merge 방식: git pull --no-rebase 👉 :wq
  • rebase 방식: git pull --rebase
    • pull 상의 rebase는 다름 (협업시 사용 OK)

협업중 충돌 상황 해결하기

  • git pull --no-rebase 👉 선택, git add . 👉 git commit 👉 :wq
  • git pull --rebase

로컬의 내역 강제 push해보기(팀원과 합의 하에)
1. 로컬의 내역 충돌 전으로 reset
2. 원격에 강제 적용: git push --force

5-4. 원격 branch

5-4-1. 로컬에서 원격으로 브랜치 push하기

  1. 브랜치 생성: git branch (브랜치명)
  2. 브랜치 푸시: git push -u origin (브랜치명)
  3. 목록 확인: git branch --all

5-4-2. 원격에서 로컬로 브랜치 받아오기

  1. github에서 브랜치 생성, 받기 전 확인: git branch -a
  2. git fetch 👉 확인: git branch -a
  3. 로컬에 같은 브랜치명 생성 및 스위치: git switch -t origin/(브랜치명)

5-4-3. 원격의 브랜치 삭제

git push (원격 이름) --delete (원격의 브랜치명)

5-5. 소스트리

https://www.yalco.kr/@git-github/4-6/

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글