git & github

kirin.log·2021년 1월 4일
0

✅ Git

🔸 git 공식명칭: 분산 버전 관리 시스템(VCS)
프로젝트 파일의 변경 사항을 추적하는 시스템.

  • 개발자들은 프로젝트의 변경 사항을 기록하고, 특정 시점의 버전으로 언제든 돌아갈 수 있다.
  • 개별 버전의 프로젝트를 병합하여 기준이 되는 버전의 프로젝트에 적용 할 수 있다

🔸 Repositories(저장소) 란?

  • Local repository - 본인의 컴퓨터에 저장된 로컬 버전의 프로젝트 저장소
  • Remote repository - 내 컴퓨터가 아닌 외부 (일반적으로 원격 서버) 버전의 프로젝트 저장소. (팀에서 작업 할 때 특히 유용)
    이 곳에서 프로젝트 코드를 공유할 수 있고, 다른 사람의 코드를 확인할 수도 있고, 로컬 버전의 프로젝트와 병합하고, 변경 사항을 적용 할 수 있다.

❗️ 버전 관리(VCS - Version Control System)란?
버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 실제로 거의 모든 컴퓨터 파일의 버전을 관리할 수 있다.

VCS을 사용하면,
각 파일을 이전 상태로 되돌릴 수 있고, 프로젝트롤 통째로 이전 상태로 되돌릴 수 있고, 시간에 따라 수정 내용을 비교해 볼 수 있고, 누가 문제를 일으켰는지도 추적할 수 있고, 누가 언제 만들어낸 이슈인지도 알 수 있다.
또한 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.

  • 분산 버전 관리 시스템(DVCS)

git과 같은 DVCS에서의 클라이언트는 단순히 파일의 마지막 스냅샷을 checkout 하지 않는다. 그냥 저장소를 히스토리와 더불어 전부 복제한다(Clone).
서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다. 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.

git은 데이터를 파일 시스템 스냅샷의 연속(stream)으로 취급하고 크기가 아주 작다. 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 모두 기록하며, 파일이 달라지지 않았으면 파일을 새로 저장하지 않는다(성능을 위해).
시간 순으로 프로젝트의 스냅샷을 저장한다.

  • GIT의 특징
    • 오프라인 및 로컬에서 조회 가능
      👉 거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크 속도의 영향을 받지 않는다. 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령이 순식간에 실행된다.
      프로젝트의 히스토리를 조회할 때 서버 없이 조회
    • 오직 데이터를 추가하는 기능
      👉 git 데이터베이스에 데이터가 추가된다. 일단 스냅샷을 커밋하고 나면 데이터를 되돌리거나 삭제할 방법이 없다.
    • 3가지 기본적인 상태 알기
      👉 Modified: 수정한 파일을 아직 로컬 데이터페이스에 커밋하지 않은 것을 의미. (아직 로컬에만 존재)
      👉 Staged: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미. (Staging Area 단계에 있음. 여기서 커밋하면 스냅샷으로 저장됨)
      👉 Committed : 데이터가 로컬 데이터베이스에 안전하게 저장되었다는 것을 의미.
  • git directory(깃 디렉토리)는 git이 프로젝트의 메타데이터와 데이터베이스를 저장하는 곳을 말한다.(git의 핵심)
    다른 컴퓨터에 있는 저장소를 Clone할 때, git디렉토리가 만들어진다.
  • Staging Area는 git directory에 있다. 단순한 파일이고, 곧 커밋할 파일에 대한 정보를 저장한다.
    커밋할 스냅샷을 만든다. Staging Area에 있는 파일들을 커밋해서 git directory에 영구적인 스냅샷으로 저장한다.
  • Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified이다.

🔸 git 최초 설치 & 설정(git bash 기준)

  • git 설치 후 확인 명령어(버전 확인, git이 설치 되어 있는지 확인할 수 있다)
    git --version

  • git 본인 정보 등록 명령어(이름&이메일, 최초 한 번만 등록하면 됨)
    git config --global user.name "your name"
    git config --global user.email "email address"

❗️--global옵션으로 설정하는 것은 딱 한번만 하면 된다.
(프로젝트마다 다른 이름/이메일을 사용하고 싶다면, --global옵션을 빼고 명령을 실행하면 된다)

  • 설정한 모든 내역을 확인하는 명령어
    git config --list

  • 명령어에 대한 옵션들을 찾아보고 싶을 때 사용하는 명령어
    git add -h


🔸 git 저장소 만들기

방법1) 아직 버전관리를 하지 않는 로컬 디렉토리를 하나 선택해서 git저장소를 적용하는 방법.

방법2) 버전 관리중인 git저장소에서 Clone하는 방법.

위 2가지 방법 모두, 로컬 디렉토리에 Git저장소가 준비되면 git을 통해 버전관리를 할 수 있다.

방법1) 나의 로컬 디렉토리에서 git저장소 적용하기
1) 로컬 디렉토리 내 프로젝트 폴더에 위치하기

  • mac기준
    cd / Users / user / (project folder name)
  • window기준
    cd / c / user / (project folder name)

2) git 시작하기
git init

❗️위 명령어를 통해 .git이라는 하위 디렉토리를 만들어준다. .git디렉토리에는 저장소에 필요한 뼈대파일이 들어있다. 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다.(git이 이 파일을 관리하게 하려면 저장소에 파일을 추가(git add)하고 커밋(git commit -m)해야 한다.

방법2) 기존 저장소를 Clone하기
1) clone 명령어 실행하기 (내 프로젝트 폴더로 바로 클론)
git clone (git source code url)/(project folder name)

<요약 - 터미널에서 명령어로 컨트롤 (❗ 띄어쓰기 유의)>✨✨✨
1) 프로젝트 폴더로 이동하여 .git 디렉토리 생성
👉 현재 저장소에 대한 모든 변경사항을 이제부터 git이 추적/관리한다.

git init

2) git commit 하여 수정 사항 적용
👉 git commit이란, 현재 상태를 나타내는 스냅샷과 같다(현재 버전의 코드를 commit에 저장), 프로젝트의 진행 상황을 효율적으로 관리할 수 있다.
❗ 커밋을 남기는 시점은 특정 내용, 기능을 추가한 후 / 수정 사항을 적용한 후

  • git commit
  • git commit -m "(변경사항 요약 내용)" ➡ 커밋 메시지 남기기
  • git log ➡ 모든 commit 내용 확인

3) 추가 또는 수정한 후에는 꼭 현재 상태를 확인한다
👉 변경사항 확인

git status

4) 파일을 추가한 뒤 깃에 저장
👉 특정 파일(=파일명), 모든 파일(=.)
❗ 여러개의 특정 파일을 저장하고 싶다면 각각의 파일명을 띄어쓰기로 구분

git add 파일명 / git add . / git add 파일명 파일명 파일명


🔸 Branches 만들기

  • 브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념(main에서 뻗어나온 가지).
  • 각각의 개별 브랜치는 다른 브랜치의 영향을 받지 않아서 독립적인 여러 작업을 동시 진행 가능.
  • git에서 저장소(repository)를 처음 만들면 main(또는 master)라는 이름의 브랜치를 만든다(=기준이 되는 브랜치)
  • master브랜치(기준) 외 새로운 브랜치(추가)를 만들어서 작업 선언(=git checkout)하지 않는 이상, 모든 작업은 master브랜치에서 이루어진다.
  • 브랜치 생성
    git branch 브랜치이름
  • 다른 브랜치로 이동(ex. main branch -> 추가 하위 branch)
    git checkout 브랜치이름
  • 브랜치 삭제
    git branch -d 브랜치이름

❗️checkout(브랜치 이동) 꼭 해주기!
현재 위치한 브랜치 항상 확인하기(checkout상태 확인)

🧐 워킹 디렉토리(=현재 작업중인 내 브랜치)는 크게 2가지로 나뉜다.

  • Tracked(깃의 관리대상) - 이미 스냅샷에 포함돼있던 파일(git add 이후를 뜻한다. 즉, git이 알고 있는 파일이라는 뜻)
    • Unmodified(수정하지 않음), Modified(수정함), Staged(커밋으로 저장소에 기록할 예정단계)상태 중 하나이다.
    • ❗️처음 저장소를 clone 하면 모든 파일은 tracked 이면서 unmodified 상태이다.(파일을 checkout 하고 나서 아무것도 수정하지 않았기 때문)
  • Untracked(관리대상 아님) - Tracked 파일을 제외한 모든 파일(로컬에 위치한 파일, 스냅샷도 staging area에도 포함되지 않은 파일)

🔸 터미널 명령어

🚀 cd

  • change directory (원하는 디렉토리 안으로 들어가기)
  • cd ~ / cd desktop : 바탕화면 돌아가기
  • cd (폴더/파일명) : 해당 폴더/파일로 들어가기

🚀 mkdir

  • make directory (폴더/파일 만들기)
  • mkdir (디렉토리 이름) : 디렉토리 생성

🚀 ls

  • list의 약자
  • 현재 위치(desktop 또는 특정 폴더 안)에 속해있는 리스트를 보여줌
  • li -al : 전체 상세 리스트 보여주기

🚀 cd..

  • 디렉토리 한 단계 위(전)로 가는 것(전단계 이동)

🚀 pwd

  • 현재 위치 확인

🚀 rm -rf

  • 삭제 기능. rm -rf 폴더/파일명을 명령하면 해당 내용이 삭제됨

🚀 vi

  • 특정 파일 안으로 들어간다
  • vi (파일명) : 해당 파일 페이지로 접근하며, 터미널 창이 변한다.(해당 파일 페이지 내부로 들어왔기 때문)
  • 페이지 내부로 들어오면 기본적으로 '수정불가 모드(insert mode)'이다.
  • i : insert모드로 전환(수정 가능한 상태) ➡ 작업 내용 작성하기
    esc + : + w + q : 저장한 뒤 페이지에서 빠져나오기

🚀 touch

  • 파일 생성 (ex. touch test.js)
    ls로 확인해보면 생성된 파일 확인할 수 있다

🚀 cat

  • 터미널에 파일내용 출력 ➡ vi로 접근한 페이지 내부에서 작성한 내용을 터미널에서 열어볼 수 있다.
  • cat (파일명)

🚀 cp

  • 폴더/파일 복제 기능
  • cp (파일명) (복제하고자 하는 파일명)

🚀 mv

  • 폴더/파일 이동 기능
  • mv (파일명) (이동하고자 하는 폴더명)
    cd (이동한 폴더명)로 위치를 이동해서 ls를 통해 확인해보면 이동한 파일명을 확인할 수 있다

🔸 git 명령어

🚀 git log

  • 저장소의 커밋(commit)히스토리를 조회(시간순)하는 명령어.
    (가장 최근의 커밋이 가장 먼저 나온다)
  • git log -p -2: 최근 2개의 결과만 보여주는 옵션(git log -p -Number)

🚀 git rm

  • Staging Area 와 워킹 디렉토리(로컬)에 있는 파일 삭제(실제 파일도 지워진다).
    git rm 파일명을 명령하면 해당 내용이 삭제됨
    (git status로 잘 삭제되었나 확인해보기 /git commit하면 삭제된 파일은 더이상 추적되지 않는다.)
  • Staging Area에서만 제거하고, 워킹 디렉토리에 있는 파일은 지우지 않고 남겨두고 싶을 때 : git rm --cached 파일명

🚀 git mv (변경전file) (변경후file)

  • git은 파일이름의 변경이나 파일의 이동을 명시적으로 관리하지 않기 때문에, 파일 이름이 변경됐다는 별도의 정보를 저장하지 않는다.
    따라서 git이 파일의 이름이 변경된 것을 알 수 있도록 명령어를 준다.
    git mv BeforeChangeFile AfterChangedFile을 명령하면 해당 내용이 삭제됨
    (git status로 잘 바뀌었나 확인해보기)
  • git mv명령어는 아래 2가지를 수행한 것과 똑같다
    $ git rm BeforeChangeFile
    $ git add AfterChangedFile

https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0

✅ GitHub

🔸 git을 사용하는 프로젝트를 위한 호스팅 서비스

  • GitHub을 사용하여 로컬 프로젝트 repository를 원격 클라우드 기반 GitHub 저장소에 업로드 할 수 있고, public repository 들을 통해 다른 개발자들과 교류할 수도 있다.
  • GitHub repository는 모든 프로젝트 파일들과 코드의 히스토리를 관리할 수 있게 해주고, public 혹은 private 하게 협업할 수 있게 해준다.

🔸 내 로컬 Repository를 GitHub 에 push 하기

---<Github>---
1. Github 에서 새 repository를 생성한다. (README 선택X)

---<local>---
2. 로컬에서 폴더를 생성해준 뒤 터미널에서 cd 폴더명으로 들어간다

  1. git init을 선언한다 (.git 폴더 생성됨)
  1. 나의 로컬 repository 를 GitHub repository 와 연결한다.
    git remote add origin (깃허브 주소)
    git remote -v를 통해 잘 연결되었나 확인해보기
  1. 새 remote 를 이용하여 코드를 Push 한다.(git push 명령어는 로컬 Git repository 의 코드를 GitHub repository 로 업로드 한다)
    git push origin main을 통해 나의 local의 모든 내용을 github에 올리기

✅ GitHub repo Clone 하기

👉 github에서 클론하고자 하는 repository 에서 주소 복제하기


👉 local 터미널에서 복제한 주소로 클론하기

  • wecode라는 폴더 안에 클론 하기(cd를 통해서 해당 폴더 안에서 명령어 작성)
  • git clone (복제한 주소 붙여넣기)
    ❗ window에서 터미널 붙여넣기는 shift + insert

👉 클론이 진행된 후에는 나의 local에 wecode폴더 ➡ westagram-frontend 폴더 생성
(westagram-frontend 폴더 자체를 클론했기 때문에, 해당 폴더가 내가 지정한 폴더 안에 생김)
cd westagram-frontend 를 통해 해당 폴더로 들어갈 수 있다. 이제부터는 이 위치에서 작업을 시작


👉 내가 작업할 환경인 branch생성 (보통 '기능'을 기준으로 브랜치 명을 정함)
git branch feature/login (기능을 기준으로 브랜치명을 만든 경우
git branch feature/saebom (내 이름으로 브랜치명을 만든 경우)
❗ 브랜치가 잘 만들어졌나 확인해보려면 git branch를 명령한다. 해당 명령어를 치면 어떤 브랜치들이 있는지 확인할 수 있다.

❗ 현재 (feature/saebom) 브랜치가 생성된 상태이며, 위치는 main이다.
(해당 브랜치 안으로 들어가는 명령어를 해줘야 한다!!!)


👉 내가 만든 branch로 들어가기
git checkout feature/saebom (feature/saebom브랜치에 초록불)


👉 vs code 에서 작업하기
❗ git bash에서 한 모든 위와 같은 작업은 vs code 에서 터미널을 열어서 할 수 있다(ctrl+j)

작업 완료(코드 쓰기) 후 꼭 진행해야 하는 4단계

  • 변경 사항 확인 git status
  • Stage git add .
  • Commit git commit -컨벤션 지키기(회사마다 다름)
    esc + :wq로 저장하고 빠져나오기
    git log로 커밋메시지 내역 확인하기
  • Push git push
    git push origin feature/saebom
  • Pull Request



🚫 git conflic(깃 충돌)을 방지하기 위한 매뉴얼

profile
boma91@gmail.com

0개의 댓글