경일 메타버스 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은 데이터를 파일 시스템 스냅샷(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. 원격 브랜치를 업데이트
- 로컬에 없는 커밋을 다운로드
- 원격 브랜치를 업데이트
- 원격에 없는 커밋을 업로드
- 원격 브랜치를 업데이트