경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220418 2022/04/04~2022/12/13

Jinho Lee·2022년 4월 18일
0

경일 메타버스 20220418 3주차 1일 수업내용. 버전 관리 시스템과 Git, Git 명령어 - git push까지
오늘은 Git에 대해서 심화된 내용을 공부하였다. 대학에서 배우고 싶었지만 접할 수 없던 내용이기에, 이번에 알찬 공부가 되었다고 생각한다. 예상보다 더욱 어려운 내용이었기에 거듭한 복습이 필요하리라 생각한다. 나중에 Git 관련으로 별개의 포스트를 만들어 정리하고자 한다.

Git

버전 관리 (Version Control) : 파일의 변화를 기록하는 것.
버전 관리 시스템 (Version Control System) : 파일의 변화를 기록하여 추후 특정 버전으로 불러올 수 있는 시스템. 예) SVN, PerForce (중앙집중형), Git

로컬 (내 것) : 내 컴퓨터에서만 버전 관리
중앙집중형 (서버) : 서버에서만 버전 관리
분산형 (서버와 내 것 분산해서) : 내 컴퓨터 + 서버에서 버전 관리

  • Git은 분산형 버전 관리 시스템 (Distributed Version Control System)

Git

Git의 특징 : 다른 버전 관리 시스템과의 가장 큰 차이점은 ‘데이터를 다루는 방법’. 다른 건 파일의 변화를 시간 순으로 관리한다. Git은 데이터를 파일 시스템 스냅샷(snapshot)의 연속으로 취급한다. Git은 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 성능을 위해서 파일을 새로 저장하지 않고, 이전 상태의 파일에 대한 링크(link)만 저장한다. 즉, Git은 데이터를 스냅샷의 스트림(흐름)처럼 취급한다.
스냅샷(snapshot) : 특정 시점에 스토리지(storage)의 파일 시스템을 포착해 보관하는 기술

Git은 파일을 아래 세 가지 상태로 관리한다.
Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
커밋(commit) : 확정하다. 파일의 변화를 확정.

Git으로 하는 일은 기본적으로 아래와 같다.
1. 작업 디렉토리에서 파일을 수정한다. → Modified
2. 스테이지 영역에 파일을 추가하여 커밋할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있다. → Staged
3. 스테이지 영역에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장한다. → Committed

  • Git은 스냅샷을 이용해서 버전 관리함.
  • Comitted : 버전 관리를 한 상태
  • Modified : 수정이 일어난 상태
  • Staged : 커밋하겠다고 한 상태

Github - 원격 저장소 플랫폼. 다른 저장소는 Gitlab, Bitbucket 등등이 있다.

명령어

Git 명령어 - learn git branching으로부터

간단 정리 내용

  • git commit : 커밋하는 것
  • git branch : 브랜치를 만드는 것
    - 브랜치 : 특정 커밋에 대한 참조
    - -f : 브랜치를 강제로 옮기는 것
  • git checkout : 특정 버전(커밋)을 불러오는 것
    - -b : 브랜치를 만들고 체크아웃
  • git merge : 서로 다른 두 개의 커밋을 합쳐서 새로운 커밋을 생성
  • git rebase : 커밋을 복사해 다른 커밋으로 붙여넣는 것
    - -i : 인터렉티브 리베이스
  • git cherry-pick : 원하는 커밋을 복사해 붙여넣는 것
  • 상대 참조(Relative Reference)
    - HEAD : 현재 작업 중인 버전
    - ^ : 특정 커밋의 부모
    - - ^2 : 두 번째 부모
    - ~ : 특정 커밋으로부터 어떤 수만큼 떨어진 부모
  • git tag : 특정 커밋에다가 어떤 내용을 남기는 것
  • git clone : 원격 저장소를 복제하는 것
  • git fetch : 원격 저장소의 내용을 로컬로 가져오는 것
    - 1. 로컬에 없는 커밋을 다운로드
    - 2. 원격 브랜치를 업데이트
    - - 원격 브랜치 : 원격 저장소의 브랜치를 추적
  • git pull : git fetch + git merge
  • git push : 로컬 저장소의 내용을 원격으로 보내는 것
    - 1. 원격에 없는 커밋을 업로드
    - 2. 원격 브랜치를 업데이트

로컬

  1. git commit : 커밋을 한다.
  2. git branch 브랜치명 : 브랜치를 새로 만든다.
    옵션 : -f 브랜치명 위치 : 브랜치의 위치를 지정, 브랜치를 위치로 강제로 이동.
  3. git checkout 위치 : HEAD를 위치로 옮긴다.
    옵션 : -b 브랜치명 (위치) : 브랜치를 새로 만들고 선택, HEAD를 옮긴다. 위치 또한 지정 가능하다.
    HEAD : 현재 작업 중인 커밋의 위치를 의미한다.
  4. git merge 브랜치명 : 브랜치를 현재 HEAD에 합친다. (merge : 병합하다)
  5. git rebase 위치 : 현재 HEAD로부터 위치까지의 위치의 위에 커밋을 접목한다.(덧붙인다) HEAD가 위치의 부모에 있다면, 위치로 이동하여 최신 상태가 된다.
    옵션 : -i 위치 (위치) : rebase를 하면서, 커밋의 순서를 바꾸거나 필요없는 커밋을 제외할 수 있다. 포함을 시작하는 위치도 덧붙일 수 있다.
  6. git log : 커밋의 위치(해시, hash)를 모두 표시한다.
  7. 위치^ : 위치의 한 커밋 위를 상대적으로 가리킨다. 상대 참조. ex) HEAD^ - HEAD 한 커밋 위
  8. 위치~수 : 위치의 수만큼의 위를 상대적으로 가리킨다. 상대 참조. ex) HEAD~3 - HEAD 세 커밋 위
  9. 위치^수 : 위치에서 한 커밋 올라갈 때, 부모가 다수 있을 때 부모를 골라 올라갈 수 있다. ex) HEAD^2 - HEAD 두 번째 부모 한 커밋 위
  10. 위치~수^수^ : 상대 참조는 복수의 참조를 한번에 사용할 수 있다.
  11. git reset 위치 : 위치까지 변경내역을 되돌리는 명령어. 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮긴다. * 로컬 (본인의 컴퓨터) 브랜치에서만 사용할 것
  12. git revert 위치 : 위치까지 변경내역을 되돌리고 공유하는 명령어. 리모트 (다른 사람의 컴퓨터) 브랜치에서 사용한다. * 반드시 한 커밋씩 되돌릴 것. 아니면 충돌한다.
  13. git cherry-pick 커밋(위치) 커밋 ... : 현재 위치(HEAD) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 명령어. rebase처럼 HEAD에 커밋을 덧붙인다. git rebase -i처럼 사용할 수 있다.
  14. git tag 태그명 커밋 : 영구적으로 움직이지 않는 태그를 커밋에 다는 명령어. 태그에 checkout해도 태그에 직접 커밋은 할 수 없다. HEAD가 분리될 뿐.
  15. git describe (위치) : 위치에서 가장 가까운 부모 태그까지, 몇 커밋 멀리 있는지와 묘사하고 있는 커밋의 해시(위치)를 표시한다. 위치를 지정하지 않으면 지금 checkout된 곳을 사용한다.(HEAD)

원격

  1. git clone : 원격 저장소의 복사본을 로컬에 생성할 때 사용하는 명령어. * 실제로 사용하는 방법은 좀 다르다.
  2. 원격 브랜치 origin/main : 원격 저장소의 상태를 반영. 체크 아웃을 하게 되면 분리된 HEAD 모드로 가게 된다. - 원격 저장소를 추적하는 특수한 브랜치 - 브랜치의 이름은 main, 원격 저장소의 이름은 origin.
  3. git fetch : 원격 저장소에서 업데이트된 내용을 가져오는 명령어. 원격 저장소에는 있지만 로컬에는 없는 커밋들을 다운로드 받고 원격 브랜치가 가리키는 곳을 업데이트한다. 그러나 로컬 상태는 전혀 바꾸지 않는다. 작업 전에 반드시 하게 될 작업이 될 것.
  • 원격 저장소의 내용을 로컬에도 동기화 -
    1. 로컬에 없는 커밋을 다운로드
    2. 원격 브랜치를 업데이트
  1. git pull : 원격 저장소의 변경을 fetch하고 그 이후에 merge하는 작업의 과정이 워낙 자주 있기에, 이 두 가지를 동시에 수행하는 명령어가 필요하다. 이것이 pull. * 원격과 로컬의 상태가 너무 다를 수 있기에, 조심하지 않으면 충돌이 일어날 수 있다.
  • git fetch → git merge -
  1. git push : 원격 저장소에 작업을 업로드하고 공유하는 명령어.
  • 로컬 저장소의 내용을 원격에 동기화 -
    1. 원격에 없는 커밋을 업로드
    2. 원격 브랜치를 업데이트

0개의 댓글